Compréhension approfondie de Task.WaitAll et Task.WhenAll
En programmation asynchrone, les développeurs doivent souvent choisir entre Task.WaitAll
et Task.WhenAll
. Ces deux méthodes ont chacune leurs propres caractéristiques et scénarios applicables.
Tâche.WaitAll
Task.WaitAll
est une méthode de blocage qui suspend l'exécution du thread en cours jusqu'à ce que toutes les tâches spécifiées soient terminées. Cela signifie que lors de l'utilisation de Task.WaitAll
, les autres codes et opérations doivent attendre la fin de la tâche avant de continuer. C'est très utile dans les scénarios où un comportement synchronisé est requis.
Tâche.QuandTout
Task.WhenAll
est une méthode non bloquante. Lorsqu'il est appelé, il renvoie une tâche qui représente l'achèvement de toutes les tâches spécifiées. Cela permet au code de continuer à s'exécuter pendant que la tâche est toujours en cours d'exécution. Une fois toutes les tâches terminées, vous pouvez attendre que les tâches renvoyées obtiennent les résultats.
Exemple de code
L'extrait de code suivant illustre la différence entre Task.WaitAll
et Task.WhenAll
:
Utilisez la méthode de blocage Task.WaitAll :
<code class="language-csharp">Task task1 = Task.Run(() => { /* 任务 1 */ }); Task task2 = Task.Run(() => { /* 任务 2 */ }); Task.WaitAll(task1, task2); // 代码在两个任务都完成后继续执行</code>
Manière non bloquante en utilisant Task.WhenAll :
<code class="language-csharp">Task task1 = Task.Run(() => { /* 任务 1 */ }); Task task2 = Task.Run(() => { /* 任务 2 */ }); Task whenAllTask = Task.WhenAll(task1, task2); await whenAllTask; // 代码在 whenAllTask 完成后继续执行</code>
Dans le premier exemple, Task.WaitAll
bloque le fil de discussion actuel jusqu'à ce que task1
et task2
soient terminés. Dans le deuxième exemple, Task.WhenAll
renvoie une tâche (whenAllTask
) qui représente l'achèvement de deux tâches. Cela permet au code de s'exécuter de manière asynchrone pendant que la tâche est toujours en cours d'exécution. Une fois les deux tâches terminées, le code utilise await
pour attendre que whenAllTask
se termine.
Choisissez la méthode appropriée
Le choix deTask.WaitAll
et Task.WhenAll
dépend des besoins spécifiques de l'application. Task.WaitAll
convient lorsqu'un comportement synchronisé est requis. Task.WhenAll
est préférable lorsqu'une exécution asynchrone est requise, permettant à l'application de continuer à effectuer d'autres tâches en attendant la fin de la tâche spécifiée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!