【问题标题】:How to return data from a Threading Task如何从线程任务返回数据
【发布时间】:2011-03-21 16:21:29
【问题描述】:

我目前正在尝试使用 .net 任务来运行长方法。我需要能够从任务中返回数据。每次在新任务中运行它时,我想多次调用此方法。但是,使用 Task.Result 属性返回数据会使每个任务等待完成。

例如目前如果做这样的事情:

public void RunTask()
{
   var task = Task.Factory.StartNew(() => 
   { 
      return LongMethod() 
   });  

   Console.WriteLine(task.Result);
}

并多次调用它,每次花费不同的时间,等待每个任务完成后再执行下一个任务。

是否可以多次调用我的 RunTask 方法,每次都返回一个结果,而不必等待每个任务按顺序完成?

【问题讨论】:

    标签: .net multithreading .net-4.0 c#-4.0


    【解决方案1】:

    是的。当您在 Task<T> 上调用 task.Result 时,它会阻塞直到出现结果。

    如果您想使其完全异步,您可以更改方法以直接返回Task<T>,并在调用者级别“阻止”,或者使用延续:

    public void RunTask()
    {
       var task = Task.Factory.StartNew(() => 
       { 
          return LongMethod() 
       });  
    
       // This task will run after the first has completed...
       task.ContinueWith( t =>
           {
               Console.WriteLine(t.Result);
           });
    }
    

    【讨论】:

    • 啊我明白了现在的延续。这完成了我所需要的。谢谢。
    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2019-02-10
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2022-07-05
    相关资源
    最近更新 更多