Maison >développement back-end >C++ >Await vs tâche.Atthes: Pourquoi l'utilisation de la tâche est-elle provoque des impasses?
await
: La racine de l'impasse Task.Wait
La différence de programmation asynchrone est légèrement importante. Cet article explore les différences entre les deux et analyse les scènes d'impasse communes. await
Task.Wait
tâche.Aivent: blocage synchrone
Couvrir simultanément le thread d'appel jusqu'à la fin de la tâche. Cela a essentiellement suspendu le fil et attendu l'exécution de la tâche.
Task.Wait
L'exécution de la méthode actuelle asynchrone. L'état de la méthode a été capturé et une tâche inachevée est retournée à l'appelant. Lorsque l'expression d'attente est terminée, la partie restante de la méthode est prévue à fonctionner en continu. Scène de verrouillage mort
await
Compte tenu des exemples de code suivants, dans lesquels l'erreur utilise
Dans ce code, la méthode
bloque le thread actuel, en attendant que toutes les tâches de la collection se terminent. Cependant, chaque méthode contient une expression qui pend son exécution. Task.Wait
<code>Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray());</code>, l'expression
dans la tâche ne peut pas être terminée. Cela génère des verrous morts car la tâche ne peut pas continuer à être exécutée à moins que l'appel ne soit appelé pour libérer son obstruction; Task.WaitAll
Ros()
Pourquoi le bloc attend-il pour éviter les verrous morts await
En utilisant l'obstruction en attente, comme Task.WaitAll
ou verrouillage, il ne provoquera pas de verrouillage mort dans cette scène, car elle n'empêchera pas la tâche d'être exécutée sur un thread séparé. L'attente d'obstruction n'est que l'exécution de la méthode d'appel de retard, permettant à la tâche de continuer et enfin de terminer. await
Pour éviter les serrures mortes, assurez-vous de comprendre la différence entre
et. D'une manière générale, Thread.Sleep
est toujours utilisée dans le code asynchrone pour s'assurer que le thread d'appel est maintenu.
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!