6

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

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

4

1 回答 1

24

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

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

于 2013-04-24T15:29:18.457 回答