考虑一个具有某种生命周期的类。在此生命周期内,一个事件可能会发生任意次数,并且该事件通过任务的完成发出信号(在事件之后更新)。该对象也可能被关闭,结束其生命周期。关闭也通过任务完成发出信号。它也可能永远存在。
现在考虑某种对对象生命周期建模的异步工作流:
//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 上注册了无限数量的延续。还是他们?延续会被取消注册还是应用程序最终会爆炸?是否有更简洁的模式来模拟这样的控制流?