考虑一个具有某种生命的类。在此生命周期中,事件可能会发生任意次数,并且通过完成任务(在事件之后续订)来发出事件信号。该对象也可能被关闭,结束其生命周期。通过完成任务也会发出关机信号。它也可能永远存在。
现在考虑对对象的生命周期建模的某种异步工作流:
//will be completed on Shutdown. Is the same object for the entire lifetime.
Task shutdownTask = ...
while(true)
{
//will be completed when the event occurs. Is different on each loop.
Task eventTask = ...
if (await Task.WhenAny(shutdownTask, eventTask) == eventTask)
{
//Event has occured
...
}
else
{
//Object has been shutdown. React and leave.
...
return;
}
}
eventTask的一个示例可能是异步从异步队列中取消对象。
直观地说,我发现用这种方式建模对象的生命周期并没有错。但是,该对象可能永远存在,并且在shutdownTask上注册了无限数量的延续。或者是他们?将继续注销还是应用程序最终会爆炸?是否有更清晰的模式来模拟这样的控制流程?
答案 0 :(得分:3)
是的,当其中任何一个任务触发时,将从所有给定的任务中删除继续。