Well I did say ‘mostly’ ( which reminds me of a fun clip of NASA talking about the surface of one of Jupiter’s moons lol).
Perhaps I’m missing some context since I only skimmed the first part of the OP so please correct me if I’m way out of the park on this one. It seems Baste was talking about regular actions that happen over a period of time. So in this context I’m not talking about async anything. It’s purely synchronous. I’m not talking about long tasks that will stop the whole program while they happen. I’m talking about incremental updates that happen every frame or maybe every fixed amount of time but are wholly blocking and it doesn’t matter because the action will be finished in a blink. To my admittedly caveman brain, async libraries seem a bit overkill for that. If I need error messages to go out to unknown receivers I can use events. If I want to cancel the action it’s as simple as removing it from the list of things to update.
Where I find things like the TPL extremely useful is when I specifically need to get the result of something and I don’t know how long that will take. Like generating a procedural map. Or downloading a file. I can just write the logic like I were assuming it was all going to happen in one frame immediately even though it doesn’t.
There are clever ways you could chain logic together that are predicated on waiting on in-game actions. For example an AI that issues commands to do things like ‘Move to this location in front of a door’, then ‘Open this door’, then "Use this ability’, then ‘Wait Five Seconds’, then ‘Run Away’ which could all take a different amount of time or even fail. I usually just default to BehaviourTrees for that kind of thing but I’ve seen plenty of examples of Promise-based systems doing the same thing. But that’s still promised-based programming. I’ve never personally seen an example where a Task was re-starting itself every single frame.