.net - 如何从线程任务返回数据

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

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

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

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

   Console.WriteLine(task.Result);
}

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

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

最佳答案

是的。当您调用 task.ResultTask<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);
       });
}

关于.net - 如何从线程任务返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380489/

相关文章:

c# - 方法推断不适用于方法组

c# - 在父构造函数中设置窗口所有者时遇到问题

.net - 将 .net 核心控制台应用程序发布为 FDD 不是一种选择吗?

c# - 带有匿名方法的 EventHandler 是如何工作的?

c# - 哪一个更好? "var"还是 "DataType"?

c# - MvvmCross:在插件中使用 InvokeOnMainThread

c++ - 如何预定义 <atomic> 变量?

.net - 从结构句柄的 System::String^ 成员编码到 std::string

.net - VS2010 .NET内存分析-非常慢

c# - 在 C# NET 中检测应用程序关闭?