Task.yield() — это подсказка, а не переключение 🚦
⏸️ await Task.yield() предлагает исполнителю шанс выполнить что-то ещё. Именно предлагает.
⚠️ Из документации Apple дословно: «если эта задача — самая приоритетная в системе, исполнитель немедленно возобновит выполнение той же самой задачи. Поэтому данный метод не обязательно является способом избежать голодания ресурсов». И вторая половина мифа: yield не уносит работу с актора. Если тяжёлый цикл крутится на @MainActor, между yield'ами главный поток по-прежнему полностью занят. Вы получите не отзывчивость, а более мелкую нарезку подтормаживаний.
✅ Где yield реально уместен: длинный цикл, который уже выполняется вне главного актора и вы хотите дать поработать другим задачам в очереди; пайплайн, в котором вообще нет точек приостановки.
✅ Настоящее решение для UI структурное: вынести CPU-работу с @MainActor (nonisolated-функция, Task.detached, отдельный executor) и возвращаться на главный актор только чтобы опубликовать результат. Мелочь: yield() асинхронный, но не бросающий — await Task.yield() без try.