et La cause de l'impasse await
.Result
Lorsque vous utilisez des opérations asynchrones en C #, il est important de comprendre le piège potentiel de la synchronisation mixte et des appels asynchrones. Dans cet exemple, en raison de la ligne de code suivante, le dernier test est en raison des verrous morts:
La raison de l'impasse
Assert.IsTrue(CheckStatus().Result); // 导致挂起
<一> est une méthode asynchrone qui renvoie une tâche de type booléen.
CheckStatus()
Result
Cela mène à une impasse: la méthode asynchrone essaie de continuer à exécuter sur le thread principal, et le thread principal attend que la tâche se termine. Le code suivant montre l'utilisation correcte de :
await
<免> Évitez d'appeler directement
await
[Test] public async Task CheckStatusTwiceResultTest() { Assert.IsTrue(await CheckStatus()); Assert.IsTrue(await CheckStatus()); }
directement sur la tâche. Au lieu de cela, comptez sur le mode pour vous assurer que les opérations asynchrones sont effectuées en non-bloquants.
Result
Conclusion
En comprenant les conséquences potentielles du mélange de synchronisation et d'appels asynchrones, les développeurs peuvent utiliser efficacement les méthodes asynchrones en C # sans rencontrer de serrures mortes ou de problèmes de performance. Result
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!