我想异步运行一些对象的初始化,但一些对象依赖于其他正在初始化的对象。然后在我的应用程序的其余部分继续之前,所有对象都需要初始化。
是否可以在任务上调用 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() 会失败吗?
最佳答案
您肯定可以等待一个任务两次。您可以根据需要多次等待任务,而不会产生负面影响。现在,如果您已经在同一个线程中等待一个任务,它就已经完成了,所以 future 的 Wait
调用将立即返回,因为没有什么可等待的,但它们肯定会赢'失败或以其他方式产生不适当的结果。
请注意,如果任务未正常完成,而是被取消或由于抛出异常而无法完成,则调用 Wait
将重新抛出异常(每次您调用等待
)。如果 Wait
为您抛出异常,则可能就是这个原因。
关于c# - 你能多次调用一个任务的 Wait() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195994/