Programmation asynchrone:
Comparaison avec et les verrous morts potentiels await
Task.WaitAll
La différence entre et
Task.Wait
await
Dans cette scène, la méthode "Get" devrait avoir une impasse. Quelle est la raison fondamentale? Quelle est la différence entre l'utilisation d'obstruction et d'attente plutôt que
<code class="language-csharp">public async Task<string> Foo() { await Task.Delay(1).ConfigureAwait(false); return ""; } public async static Task<string> Bar() { return await Foo(); } public async static Task<string> Ros() { return await Bar(); } public IEnumerable<string> Get() { Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray()); return new string[] { "value1", "value2" }; // 由于死锁而从未执行 }</code>
Différences: await Task.Delay
et
Wait
et await
assumer des rôles conceptuels similaires, mais leurs fonctions sont différentes. bloquera le thread actuel jusqu'à la fin de la tâche. Cette méthode n'est pas recommandée car elle affiche le pool de threads.
au contraire, sera mis en pause asynchrone pour exécuter des méthodes. L'état actuel de la méthode est capturé et cette méthode renverra ses tâches inachevées à l'appelant. Une fois la tâche terminée, le reste de la méthode sera planifiée comme continuation. Task.Wait
await
Task.Wait
Les serrures mortes potentielles et les missions asynchrones
await
Dans le fragment de code fourni, la méthode "Get" appelle
, qui suspendre son exécution. En conséquence, la tâche n'a pas été terminée et le fil a toujours été bloqué dans l'appel . Cela provoquera des serrures mortes. Task.WaitAll
Utiliser la programmation asynchrone pour éviter les verrous morts
Task.WaitAll
Afin de résoudre ce problème, la programmation asynchrone doit être utilisée, en particulier lorsqu'il s'agit de tâches de retard et de suspension. En combinant l'utilisation des mots clés et await Foo
, le code peut maintenir la capacité de réponse et empêcher les verrous morts. WaitAll
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!