50

我有一个任务列表,我想等待。我在等

    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);
    }

我怎样才能返回任务,它会立即完成?

4

2 回答 2

101

在 .NET 4.5 中,您可以使用 FromResult 立即为您的任务返回结果。

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 已合并以与其他平台保持一致:

public Task<bool> MyTask()
{
    return Task.FromResult(false);
}
于 2013-11-07T21:05:12.237 回答
9

Prior to .NET 4.5, you can use TaskCompletionSource<TResult> to simulate the FromResult method.

public static Task<TResult> FromResult<TResult>(TResult result)
{
    var completionSource = new TaskCompletionSource<TResult>();
    completionSource.SetResult(result);
    return completionSource.Task;
}
于 2013-11-07T21:07:40.860 回答