gpt4 book ai didi

c# - 你能多次调用一个任务的 Wait() 吗?

转载 作者:太空狗 更新时间:2023-10-29 22:05:39 24 4
gpt4 key购买 nike

我想异步运行一些对象的初始化,但一些对象依赖于其他正在初始化的对象。然后在我的应用程序的其余部分继续之前,所有对象都需要初始化。

是否可以在任务上调用 Wait() 并稍后再次对其调用 Wait(),或者像我的示例中那样在包含它的集合上调用 WaitAll()?

Dictionary<String, Task> taskdict = new Dictionary<String, Task>( );

taskdict.Add( "Task1",
Task.Factory.StartNew( ( ) => {
//Do stuff
} ) );

taskdict.Add( "Task2",
Task.Factory.StartNew( ( ) => {
taskdict[ "Task1" ].Wait( );

//Do stuff

} ) );

try {
Task.WaitAll( taskdict.Values.Convert<Task[ ]>( ) );
}

或者第二个 Wait()/WaitAll() 会失败吗?

最佳答案

您肯定可以等待一个任务两次。您可以根据需要多次等待任务,而不会产生负面影响。现在,如果您已经在同一个线程中等待一个任务,它就已经完成了,所以 future 的 Wait 调用将立即返回,因为没有什么可等待的,但它们肯定会赢'失败或以其他方式产生不适当的结果。

请注意,如果任务未正常完成,而是被取消或由于抛出异常而无法完成,则调用 Wait 将重新抛出异常(每次您调用等待)。如果 Wait 为您抛出异常,则可能就是这个原因。

关于c# - 你能多次调用一个任务的 Wait() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195994/

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