Щиты отмены: дать критической уборке доработать 🛡️
🛡️ SE-0504 (Swift 6.4) добавляет withTaskCancellationShield: внутри щита задача не наблюдает отмену, поэтому откат и уборка, которые вы уже начали, дорабатывают до конца. Практический смысл — платежи, миграции, многошаговые записи: у критической секции наконец появляется гарантия, что её не бросят на середине. Внутри щита Task.isCancelled возвращает false, а checkCancellation() не бросает. Понять, где вы находитесь, помогает Task.hasActiveCancellationShield.
⚠️ Ключевая оговорка: щиты маскируют отмену, а не отменяют её. За пределами скоупа задача по-прежнему отменена, и это правильное поведение. Оборачивать щитом всё подряд — плохая идея: экранируйте только критическую секцию и держите её короткой.