Преобразование модуля DispatchQueue с интенсивным использованием в async/await
Когда использовать: У вас есть модуль, сочетающий DispatchQueue, обработчики завершения и замыкания @escaping; вы хотите асинхронный/ожидающий.
Предварительные требования
- Xcode с Swift 5.9+ (режим Swift 6, если вам нужен строгий параллелизм) — Установите Xcode из App Store
- Навык установлен — /рынок плагинов добавить kylehughes/the-unofficial-swift-concurrency-migration-skill
Поток
-
Запросите план миграцииРасскажите мне, как перенести NetworkService.swift на async/await, сославшись на Руководство по миграции Swift Concurrency Migration.✓ Скопировано→ Планируйте ссылки на названные статьи в руководстве.
-
Подавайте заявку шаг за шагомНачните с общедоступного API — преобразуйте методы обработчика завершения в async/await.✓ Скопировано→ В коде используются идиоматические асинхронные API, а не обратные вызовы оболочки.
-
Обработка отмены и изоляцииДобавьте отмену задачи и определите изоляцию субъектов для кэша.✓ Скопировано→ Правильная Task.checkCancellation + явная изоляция актера
Итог: Модуль перенесен без проблем, с обоснованием, связанным с собственными рекомендациями Apple.
Подводные камни
- Обертывание обратных вызовов с помощью withCheckedContinuation без фиксации владельца — Сначала перенесите корневой API; не оставляйте продолжения как постоянные мосты