c# - 你能多次调用一个任务的 Wait() 吗?

标签 c# .net asynchronous task 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() 会失败吗?

最佳答案

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

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

关于c# - 你能多次调用一个任务的 Wait() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195994/

相关文章:

c# - 从 List<MyType> 到 IEnumerable<MyType> 返回到 List<MyType> 的转换无效,为什么?

c# - 使用 C# 获取网络摄像头状态

javascript - react.js - 处于异步数据状态的深层对象不起作用

c# - 如何消除异步函数中循环报告进度的竞争条件?

c# - 使用 List<T> 动态填充 asp.net Gridview

c# - 使用 C# 从命令行启动 minecraft 1.6.4

c# - 由于 Dependent Role 属性不是关键属性,因此 Dependent Role 的重数上限必须为 '*'

c# - await 将 HttpContext.Current 设置为 null/prior - 无法手动设置

c# - 进度对话框在使用 DoEvents 的 Outlook 加载项中挂起

c# - 针对 Azure/CDN 进行编程