你可以多次调用任务上的Wait()吗?

时间:2013-04-24 15:26:07

标签: c# .net asynchronous task wait

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

是否可以在任务上调用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()会失败吗?

1 个答案:

答案 0 :(得分:20)

你当然可以等待两次任务。您可以根据需要等待任务多次,没有任何负面影响。现在,如果你已经在同一个线程中等待任务,那么它已经完成,所以未来的Wait调用将立即返回,因为没有什么可以等待,但它们肯定不会失败否则会产生不适当的结果。

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