Task.yield() — это подсказка, а не переключение 🚦

⏸️ await Task.yield() предлагает исполнителю шанс выполнить что-то ещё. Именно предлагает.

⚠️ Из документации Apple дословно: «если эта задача — самая приоритетная в системе, исполнитель немедленно возобновит выполнение той же самой задачи. Поэтому данный метод не обязательно является способом избежать голодания ресурсов». И вторая половина мифа: yield не уносит работу с актора. Если тяжёлый цикл крутится на @MainActor, между yield'ами главный поток по-прежнему полностью занят. Вы получите не отзывчивость, а более мелкую нарезку подтормаживаний.

✅ Где yield реально уместен: длинный цикл, который уже выполняется вне главного актора и вы хотите дать поработать другим задачам в очереди; пайплайн, в котором вообще нет точек приостановки.

✅ Настоящее решение для UI структурное: вынести CPU-работу с @MainActor (nonisolated-функция, Task.detached, отдельный executor) и возвращаться на главный актор только чтобы опубликовать результат. Мелочь: yield() асинхронный, но не бросающий — await Task.yield() без try.

#Swift #SwiftConcurrency #iOSDevelopment #AsyncAwait

Task.yield() — это подсказка, а не переключение 🚦 | Сетка — социальная сеть от hh.ru