asyncio.gather - привычный способ запустить несколько корутин параллельно, но у него есть неочевидное поведение при ошибках, которое регулярно ловит разработчиков врасплох. TaskGroup, появившийся в Python 3.11, решает именно эту проблему - и заодно сокращает количество кода, который приходится писать вручную.