25

I have a list of tasks, which i'd like to wait for. I'm waiting like

    await TaskEx.WhenAll(MyViewModel.GetListOfTasks().ToArray());

MyViewModel.GetListOfTasks() returns List of Task:

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

Now, i'd like to return dummy task, which would be done immediately. However, TaskEx.WhenAll would wait it forever:

    public Task<bool> MyTask()
    {
        return new Task<bool>(() => false);
    }

How can i return Task, which would be finished instantly?


  • Should you be mocking this out with a different service layer? - David L
  • @DavidL Yep, that's what i'm going to do, but at the current moment i'm just playing with new architecture, so i'd like to first fill it with dummies, and then starting working on implementation. - Vitalii Vasylenko
  • return Task.FromResult(false); - Fabio Marcolini
  • @FabioMarcolini Thanks, that works! For wp7, it would be return TaskEx.FromResult(false); but you're rignt. - Vitalii Vasylenko
  • You're creating a Task, but you never run it. - user2674389

2 답변


61

in .NET 4.5 you can use FromResult to immediately return a result for your task.

public Task<bool> MyTask()
{
    return TaskEx.FromResult(false);
}

http://msdn.microsoft.com/en-us/library/hh228607%28v=vs.110%29.aspx


For Windows Phone 8.1 and higher, the API has been merged to be consistent with other platforms:

public Task<bool> MyTask()
{
    return Task.FromResult(false);
}


  • Since the final release of the Framework its: return Task.FromResult(false); - uli78
  • @uli78 this question was specifically for windows phone 7, but great point! I've updated my answer, thank you! - David L

8

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


Linked


Related

Latest