Не могу понять почему в коде на белом скрине мне приходится явно оборачивать ожидание окончания таски в блок try except? Если этого не делать, то ошибка CancelledError
На черном скрине похожий пример, но без блока try except и там все ОК
Дело не в TaskGroup, а в том, вызываешь ли ты await task после task.cancel().
На черном скрине...
Что происходит:
1. Создаётся задача background().
2. Через 5 секунд вызывается task.cancel().
3. Выполняется return 42.
4. Python начинает выходить из async with TaskGroup.
5. TaskGroup дожидается завершения задачи.
6. Задача завершается с CancelledError.
7. TaskGroup считает отмену дочерней задачи нормальным завершением и не пробрасывает CancelledError наружу.
На белом скрине всё иначе....
речь про эти строки
task.cancel()
await task
task.cancel() запрашивает отмену задачи.
При следующем подходящем моменте выполнения в отменяемую корутину будет выброшено исключение asyncio.CancelledError.
так и вот главное...
Если ты явно делаешь await task для отменённой задачи, CancelledError будет выброшен уже в твоей текущей корутине.
❤2
ССообщество Python Программистов@python_scripts · группа · Технологии