你能在一个任务上多次调用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)。如果Wait为您抛出异常,则有可能这就是原因。