Pain point in asyncio: Potentially-failing tasks

Using TaskGroups ensures your tasks take the shape of a tree (acyclic DAG or whatever) - no child tasks outlive the parent. This is structured concurrency in a nutshell.

By default, an error in a child will interrupt the parent at certain points, but like I showed you with my snippet upthread, you can change this. Also by default, the parent will wait until all the children are done, but for example you can use something like this to change that too.