The way it is currently implemented, it's actually more like N tasks can cause M tasks to fail due to linked failure. I attempted this at first, but it lead me down a rabbit hole of having a linked list of atomically reference counted fail causes, just so that every tasks that listens to task failure can receive them. :)