WaitAll vs WhenAll
Quelle est la différence entre Task.WaitAll()
et Task.WhenAll()
de la Async CTP ?
Pouvez-vous donner un exemple de code pour illustrer les différents cas d'utilisation ?
Vous devez vous connecter pour publier un commentaire.
Quelle est la différence entre Task.WaitAll()
et Task.WhenAll()
de la Async CTP ?
Pouvez-vous donner un exemple de code pour illustrer les différents cas d'utilisation ?
Vous devez vous connecter pour publier un commentaire.
Task.WaitAll
bloque le thread courant jusqu'à ce que tout est terminé.Task.WhenAll
renvoie une tâche qui représente l'action de l'attente jusqu'à ce que tout est terminé.Qui signifie qu'à partir d'une méthode asynchrone, vous pouvez utiliser:
... ce qui signifie que votre méthode continuera quand tout est terminé, mais vous ne pouvez pas attacher un fil à juste traîner jusqu'à cette date.
await TaskEx.WhenAll(tasks)
également bloquer le thread en cours ainsi.WhenAll
, mais ce n'est pas le même que le blocage du thread.Tout JonSkeet la réponse de explique la différence entre un excellent moyen pour moi la plus grande différence pratique est la gestion des exceptions. EDIT: d'Accord, c'est pas la plus pratique, la différence, c'est une différence.
Task.WaitAll
jette unAggregateException
lorsque l'une des tâches les lancers et vous pouvez examiner toutes les exceptions lancées. Leawait
dansawait Task.WhenAll
déballe leAggregateException
et "revient", seule la première exception.Lorsque le programme ci-dessous exécute avec
await Task.WhenAll(taskArray)
la sortie est comme suit.Lorsque le programme ci-dessous est exécutée avec
Task.WaitAll(taskArray)
la sortie est comme suit.Le programme:
await t1; await t2; await t3;
vsawait Task.WhenAll(t1,t2,t3);
Comme un exemple de la différence, si vous avez une tâche à la fait quelque chose avec le thread d'INTERFACE utilisateur (par exemple, une tâche qui représente une animation dans un Storyboard) si vous
Task.WaitAll()
alors le thread d'INTERFACE utilisateur est bloqué et l'INTERFACE utilisateur n'est jamais mis à jour. si vous utilisezawait Task.WhenAll()
alors le thread d'INTERFACE utilisateur n'est pas bloqué, et l'INTERFACE utilisateur sera mis à jour.Ce qu'ils font:
Quelle est la différence:
Utilisation qui, lorsqu':
WaitAll
ce que je comprends.