C# 可以对任务多次调用Wait()吗?

C# 可以对任务多次调用Wait()吗?,c#,.net,asynchronous,task,wait,C#,.net,Asynchronous,Task,Wait,我想异步运行一些对象的初始化,但有些对象依赖于其他对象的初始化。然后,在应用程序的其余部分继续之前,需要初始化所有对象 是否可以对任务调用Wait(),然后再次调用Wait(),或者像我的示例中对包含它的集合调用WaitAll()那样 Dictionary<String, Task> taskdict = new Dictionary<String, Task>( ); taskdict.Add( "Task1", Task.Factory.Sta

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

是否可以对任务调用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[ ]>( ) );
      }
Dictionary taskdict=newdictionary();
taskdict.Add(“Task1”,
Task.Factory.StartNew(()=>{
//做事
} ) );
taskdict.Add(“Task2”,
Task.Factory.StartNew(()=>{
taskdict[“Task1”].Wait();
//做事
} ) );
试一试{
Task.WaitAll(taskdict.Values.Convert());
}

或者第二次等待()/WaitAll()会失败吗?

对于一项任务,您肯定可以等待两次。你可以在没有负面副作用的情况下,随心所欲地等待一项任务。现在,如果您已经在同一线程中等待了一个任务,那么它将已经完成,因此未来的
Wait
调用将立即返回,因为没有什么需要等待的,但它们肯定不会失败或产生不适当的结果


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

感谢您给出明确的答案。以及有关异常处理的详细信息。这是我必须考虑的一个重要问题。“如果我希望任务重新运行,在第二次等待时。我怎样才能使任务结果无效?@MerdanGochmuradov你不能。这不是任务的工作方式。@Servy-如何重新运行失败的任务?我是否需要将失败的任务复制到新的未启动任务中并等待新任务?如果是这样,我如何将失败的任务复制到新的未初始化任务中?@Simon_Weaver Yes。
任务
有一个
IsCompleted
布尔值,因此当您
等待
它时,它只是简单地检查一下,因为它将返回
true
,它将继续运行。