我目前正在尝试使用.net任务来运行long方法。我需要能够从任务中返回数据。我想在每次在新任务中运行时多次调用此方法。但是,使用Task.Result属性返回数据会使每个任务等待直到完成。
例如,目前如果做这样的事情:
public void RunTask()
{
var task = Task.Factory.StartNew(() =>
{
return LongMethod()
});
Console.WriteLine(task.Result);
}
并多次调用,每次花费不同的时间,等待每个任务完成后再执行下一个任务。
是否可以多次调用我的RunTask方法,每次返回结果而不必等待每个任务按顺序完成?
答案 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);
});
}