web-dev-qa-db-fra.com

Renvoyer la tâche <bool> instantanément

J'ai une liste de tâches que j'aimerais attendre. J'attends comme

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

MyViewModel.GetListOfTasks () renvoie la liste des tâches:

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

Maintenant, je voudrais revenir sur une tâche fictive, qui serait effectuée immédiatement. Cependant, TaskEx.WhenAll l'attendrait pour toujours:

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

Comment puis-je retourner une tâche, qui serait terminée instantanément?

31

dans .NET 4.5, vous pouvez utiliser FromResult pour renvoyer immédiatement un résultat pour votre tâche.

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

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


Pour Windows Phone 8.1 et supérieur, l'API a été fusionnée pour être cohérent avec les autres plates-formes:

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

Avant .NET 4.5, vous pouvez utiliser TaskCompletionSource<TResult> pour simuler la méthode FromResult.

public static Task<TResult> FromResult<TResult>(TResult result)
{
    var completionSource = new TaskCompletionSource<TResult>();
    completionSource.SetResult(result);
    return completionSource.Task;
}
9
Sam Harwell