4

考虑一个具有某种生命周期的类。在此生命周期内,一个事件可能会发生任意次数,并且该事件通过任务的完成发出信号(在事件之后更新)。该对象也可能被关闭,结束其生命周期。关闭也通过任务完成发出信号。它也可能永远存在。

现在考虑某种对对象生命周期建模的异步工作流:

//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 上注册了无限数量的延续。还是他们?延续会被取消注册还是应用程序最终会爆炸?是否有更简洁的模式来模拟这样的控制流?

4

1 回答 1

3

是的,当任何一个任务触发时,所有给定任务的延续都将被删除。

于 2013-03-07T16:13:19.927 回答