.net 4.5 utilise asynchrone / attente et httpclient.getasync (...) Problème de blocage
Dans certains cas, l'utilisation des caractéristiques linguistiques asynchrones / en attente dans le .NET 4.5 et HttpClient.getAsync (...) peut provoquer des serrures mortes. Plus précisément, le résultat de l'attente de httpclient.getasync (...) mènera à des verrous morts:
Blocage de fil et en attente de la tâche à terminer (par exemple, en utilisant GetResult).
Dead Lock est dû à l'utilisation de SynchronizationContext, qui garantit qu'une seule demande peut être traitée dans ASP.NET à la fois. Lors de l'utilisation de l'attente, la méthode est restaurée sur le contexte de la demande Synchronisation capturée. Cependant, si le blocage du fil et l'attente de la tâche sont terminés, il ne pourra pas récupérer des méthodes dans le contexte de la demande ASP.NET, ce qui entraîne des verrous morts.
Solution:
Pour éviter cette impasse, veuillez suivre les meilleures pratiques suivantes:
Utilisez ConfigureAwait (false) dans la méthode asynchrone "bibliothèque".Évitez de bloquer les tâches. Utilisez Await au lieu de getResult, task.result et tâche.
Asynchronous / Waiting Introduction
asynchrone / en attente de questions et réponses courantesCe 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!