立即返回任务<bool>

Vit*_*nko 34 c# multithreading task-parallel-library windows-phone-7

我有一份任务列表,我想等待.我在等

    await TaskEx.WhenAll(MyViewModel.GetListOfTasks().ToArray());
Run Code Online (Sandbox Code Playgroud)

MyViewModel.GetListOfTasks()返回任务列表:

    var tasksList = new List<Task>();
    foreach (var item in Items)
    {                
        tasksList.Add(item.MyTask());
    }
Run Code Online (Sandbox Code Playgroud)

现在,我想返回虚拟任务,这将立即完成.但是,TaskEx.WhenAll会永远等待它:

    public Task<bool> MyTask()
    {
        return new Task<bool>(() => false);
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能返回任务,这将立即完成?

Dav*_*d L 74

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

public Task<bool> MyTask()
{
    return TaskEx.FromResult(false);
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 从Framework的最终版本开始,它是:return Task.FromResult(false); (2认同)

Sam*_*ell 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;
}
Run Code Online (Sandbox Code Playgroud)