et : le piège de l'impasse await
Task.Wait
Dans la programmation asynchrone, la compréhension de la différence entre
est très importante. Cet article analysera un cas qui utilise pour provoquer des serrures mortes. await
Task.Wait
Task.WaitAll
: blocage synchrone
bloquera simultanément le thread actuel jusqu'à la fin de la tâche. Dans l'exemple de code, en attendant les 10 tâches renvoyées par la méthode Task.Wait
à terminer. Cela bloquera les threads et les empêchera d'effectuer des opérations de suivi.
: en attente asynchrone Task.Wait
Task.WaitAll
Ros()
La méthode autorisée renverra les tâches inachevées à l'appelant en attendant la tâche asynchrone. Une fois la tâche terminée, le code restant dans la méthode doit être prévu pour être suivi.
Scène de verrouillage mort await
Dans l'exemple de code, la méthode
, et la méthode await
appelle la méthode asynchrone
pour créer une série d'opérations asynchrones. Cela a effectivement empêché la tâche de terminer et de libérer des threads. En conséquence, la méthode ne sortira jamais, entraînant des serrures mortes. L'opération d'obstruction dans le code asynchrone
Get
Il n'est généralement pas recommandé d'utiliser une obstruction dans le code asynchrone. Lorsque le blocage se produit, le thread ne peut pas gérer la demande d'entrée, entraînant une baisse des performances et peut être un verrou dans l'impasse. Task.WaitAll
Ros
Conclusion Foo
Bar
La différence entre Get
compréhension et
Il ne doit être utilisé que dans des scènes spécifiques qui doivent être synchronisées. Dans la plupart des cas, il est recommandé d'utiliser une méthode "Asynchrones complète" pour utiliser pour maintenir asynchrone et éviter les problèmes de blocage dans l'ensemble du code.
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!