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