我想异步运行某些对象的初始化,但是某些对象依赖于其他对象的初始化。然后在我的应用程序的其余部分继续之前,需要初始化所有对象。
是否可以在任务上调用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()会失败吗?
答案 0 :(得分:20)
你当然可以等待两次任务。您可以根据需要等待任务多次,没有任何负面影响。现在,如果你已经在同一个线程中等待任务,那么它已经完成,所以未来的Wait
调用将立即返回,因为没有什么可以等待,但它们肯定不会失败否则会产生不适当的结果。
请注意,如果任务未正常完成而被取消或由于抛出异常而无法完成,则调用Wait
将重新抛出异常(每次调用{{ 1}})。如果Wait
为您抛出异常,那么这就是原因。