Swift 6.4 позволяет дождаться очистки в defer
После отмены задачи приложению всё ещё может понадобиться завершить очистку: отправить накопленные метрики или закрыть ресурс. Асинхронная операция при этом сама может реагировать на отмену.
В Swift 6.4 можно вызывать async-функции внутри defer: выполнение дождётся их завершения перед выходом. Для участка, который нужно защитить от отмены родительской задачи, появился withTaskCancellationShield.
В примере команды Swift защищённый блок отправляет метрики и закрывает файловый дескриптор. Такой участок стоит оставлять небольшим: защищать конкретную завершающую операцию, чтобы после отмены пользовательской задачи приложение не продолжало лишнюю работу.
Post #4811
1.02K

- 👍 1
- 🎉 1