你能在一个任务上多次调用Wait()吗?
本文关键字:调用 Wait 一个 任务 | 更新日期: 2023-09-27 18:10:47
我想异步运行一些对象的初始化,但有些对象依赖于其他对象的初始化。然后,在应用程序的其余部分继续之前,需要初始化所有对象。
是否有可能在一个任务上调用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()会失败吗?
您当然可以等待一个任务两次。你可以想等多少次就等多少次,而且不会有任何副作用。现在,如果您已经在同一个线程中等待了一个任务,那么它将已经完成,因此未来的Wait
调用都将立即返回,因为没有什么可等待的,但它们肯定不会失败或以其他方式产生不适当的结果。
注意,如果任务没有正常完成,而是被取消或由于抛出异常而无法完成,那么调用Wait
将重新抛出异常(每次调用Wait
)。如果Wait
为您抛出异常,则有可能这就是原因。