88 votes

Est-il recommandé d'utiliser prevTask.Wait() avec ContinueWith (de la bibliothèque Tasks) ?

On m'a dit récemment que la façon dont j'utilisais mes .ContinueWith pour les tâches n'était pas la bonne façon de les utiliser. Je n'ai pas encore trouvé de preuve de cela sur Internet, alors je vais vous demander votre avis et voir quelle est la réponse. Voici un exemple de la façon dont j'utilise les .ContinueWith :

public Task DoSomething()
{
    return Task.Factory.StartNew(() =>
    {
        Console.WriteLine("Step 1");
    })
    .ContinueWith((prevTask) =>
    {
        Console.WriteLine("Step 2");
    })
    .ContinueWith((prevTask) =>
    {
        Console.WriteLine("Step 3");
    });
}

Je sais qu'il s'agit d'un exemple simple et qu'il va s'exécuter très rapidement, mais supposez que chaque tâche effectue une opération plus longue. Ce qu'on m'a dit, c'est que dans le .ContinueWith, il faut dire prevTask.Wait() ; sinon, on pourrait effectuer un travail avant que la tâche précédente ne se termine. Est-ce vraiment possible ? J'ai supposé que mes deuxième et troisième tâches ne s'exécuteraient qu'une fois la tâche précédente terminée.

On m'a dit comment écrire le code :

public Task DoSomething()
{
    return Task.Factory.StartNew(() =>
    {
        Console.WriteLine("Step 1");
    })
    .ContinueWith((prevTask) =>
    {
        prevTask.Wait();
        Console.WriteLine("Step 2");
    })
    .ContinueWith((prevTask) =>
    {
        prevTask.Wait();
        Console.WriteLine("Step 3");
    });
}

0voto

Sameh Points 39

En accédant Task.Result vous faites en fait une logique similaire à task.wait

0voto

Curious Points 60

Je vais répéter ce que beaucoup ont déjà dit, prevTask.Wait() n'est pas nécessaire .

Pour plus d'exemples, on peut consulter le site Enchaînement de tâches à l'aide de tâches de continuation Encore un autre lien de Microsoft avec de bons exemples.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X