gpt4 book ai didi

c# - Task.WhenAny 会取消注册未完成任务的延续吗?

转载 作者:行者123 更新时间:2023-11-30 12:11:31 25 4
gpt4 key购买 nike

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

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

//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 上注册了无限数量的延续。或者他们是? continuations 会被取消注册还是应用程序最终会崩溃?是否有更清晰的模式来模拟这种控制流?

最佳答案

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

关于c# - Task.WhenAny 会取消注册未完成任务的延续吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15275932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com