I've done something like this with nested Tasks. The code gets really ugly, realy fast. I've done this a few times. The succeeded() or failed() spawns another Task. In one case, I actually had a 3rd Thread open up.
At that point, I moved to a wait/notify scheme which looks a lot like coroutines.