Подтвердить что ты не робот

Задача возврата <bool> мгновенно

У меня есть список задач, которые я бы хотел подождать. Я жду, как

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

Как я могу вернуть Task, которая будет завершена мгновенно?

4b9b3361

Ответ 1

в .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

Ответ 2

До .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;
}