我有一份任务列表,我想等待。我在等待
await TaskEx.WhenAll(MyViewModel.GetListOfTasks().ToArray());
MyViewModel.GetListOfTasks()返回任务列表:
var tasksList = new List<Task>();
foreach (var item in Items)
{
tasksList.Add(item.MyTask());
}
现在,我想返回虚假任务,这将立即完成。但是,TaskEx.WhenAll会永远等待它:
public Task<bool> MyTask()
{
return new Task<bool>(() => false);
}
我如何返回任务,这将立即完成?
答案 0 :(得分:68)
public Task<bool> MyTask()
{
return TaskEx.FromResult(false);
}
http://msdn.microsoft.com/en-us/library/hh228607%28v=vs.110%29.aspx
对于Windows Phone 8.1及更高版本,API has been merged与其他平台保持一致:
public Task<bool> MyTask()
{
return Task.FromResult(false);
}
答案 1 :(得分:9)
在.NET 4.5之前,您可以使用TaskCompletionSource<TResult>
来模拟FromResult
方法。
public static Task<TResult> FromResult<TResult>(TResult result)
{
var completionSource = new TaskCompletionSource<TResult>();
completionSource.SetResult(result);
return completionSource.Task;
}