考虑一个具有某种生命周期的类。在此期间,事件可能会发生任意次数,并且通过完成任务(在事件后更新)来发出信号。该对象也可以关闭,结束其生命周期。关机也是通过完成任务来发出信号的。它也可以永远存在。
现在考虑一些异步工作流模拟对象的生命周期:
现在考虑一些异步工作流模拟对象的生命周期:
//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 的例子可以是异步地从 async Queue 中出列对象。
直觉上,我对这种方式来建模对象的生命周期没有任何问题。然而,这个对象可能会永远存在,且在 shutdownTask 上注册了无数的连续任务。或者它们并不是无限的吗?连续任务会被取消注册还是应用程序最终会崩溃?是否有一种更清晰的模式来建模这样的控制流程呢?
eventTask
完成,那么该继续操作将从shutdownTask
中删除。 - Peter Ritchie