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

Mat*_*son 5 .net c# 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[ ]>( ) );
      }
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*rvy 21

你当然可以等待两次任务.您可以根据需要等待任务多次,没有任何负面影响.现在,如果你已经在同一个线程等待一个任务,将已经完成,因此未来Wait的呼叫都将只是立即返回,因为其中没有等待,但他们肯定不会失败或以其他方式产生不适当的结果.

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