Некоторые подводные камни, которые могут возникнуть при отмене асинхронных задач в Python:
- Неправильное поведение, если обработать исключение CancelledError внутри задачи. 1 Это может вызвать неожиданное поведение для других задач, которые ожидают отмены текущей. 1
- Отмена уже завершённой задачи. 3 В таком случае метод cancel() возвратит False, но в состояние задачи не попадут сведения о том, что она была отменена. 3
- Длительные операции при отмене задачи. 1 Например, если в её теле есть блок try-finally, который требует много логов, отмены подзадач и закрытия ресурсов. 1 Это может занять много времени и приостановить текущую задачу до завершения всех операций. 1
- Некорректные результаты, если не дождаться завершения задачи перед проверкой её методов done() и cancelled(). 2 Это важно, так как при отмене задача ещё может не начать выполнение. 2
Чтобы избежать этих подводных камней, рекомендуется всегда ждать завершения задачи перед проверкой её состояния, а также использовать метод Task.adddonecallback() для добавления обратных функций после отмены задачи. 12