我目前正在尝试使用 .net 任务来运行长方法。我需要能够从任务中返回数据。每次在新任务中运行它时,我想多次调用此方法。但是,使用 Task.Result 属性返回数据会使每个任务等待完成。
例如,目前如果做这样的事情:
public void RunTask()
{
var task = Task.Factory.StartNew(() =>
{
return LongMethod()
});
Console.WriteLine(task.Result);
}
并多次调用它,每次花费不同的时间,等待每个任务完成后再执行下一个任务。
是否可以多次调用我的 RunTask 方法,每次返回结果而不必等待每个任务按顺序完成?
最佳答案
是的。当您调用 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);
});
}
关于.net - 如何从线程任务返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380489/