2013-04-24 57 views
5

我想异步运行一些对象的初始化,但有些对象依赖于其他被初始化的对象。然后在我的应用程序的其余部分继续之前,所有对象都需要进行初始化。您可以多次调用任务的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()会失败吗?

回答

18

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

注意,如果一个任务没有正常完成,并改为取消或不能完成为异常的结果被抛出,然后调用Wait将重新抛出异常(每次调用Wait时间)。如果Wait正在为您抛出例外情况,那么有可能是这个原因。

+1

感谢您的明确答案。有关异常处理的详细信息。这是我必须考虑的一个重要问题。 – 2013-04-25 09:24:05

+0

@Servy如果我想让任务重新运行,请等待。我怎样才能使任务结果失效? – 2016-07-30 07:40:08

+0

@MerdanGochmuradov你不能。这不是如何工作的。 – Servy 2016-08-01 01:49:24

相关问题