如何从线程任务返回数据

时间:2011-03-21 16:21:30

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

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

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

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

   Console.WriteLine(task.Result);
}

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

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

1 个答案:

答案 0 :(得分:5)

是。当您在task.Result上致电Task<T>时,它会一直阻止,直到结果发生。

如果你想让它完全异步,你可以改变方法直接返回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);
       });
}