et async / attend provoqué les verrous morts HttpClient.GetAsync()
Dans le .NET 4.5, lors de l'utilisation de la classe
, dans certains cas, le résultat des résultats HttpClient
peut se produire indéfiniment. Dans le code prévu, ce comportement a été observé dans le cas "Test5", et il a provoqué le problème de savoir s'il y avait des erreurs ou l'API dans la classe async/await
. httpClient.GetAsync(...)
HttpClient
La raison de la serrure
Le verrouillage mort est causé par le contexte du thread et le mécanisme de synchronisation utilisé par le mode . Lorsque la demande ASP.NET attend d'être , cette méthode se rétablit généralement sur le capturé
pour s'assurer que les réserves de contexte sont nécessaires.
async/await
Cependant, dans le cas de Test5, Task
a lancé une opération de blocage lorsque vous attendez les résultats de SynchronizationContext
, c'est-à-dire
dans le contexte. AsyncAwait_GetSomeDataAsync
HttpClient.GetAsync
Async / Await et les meilleures pratiques de HttpClient Test5Controller.Get
Task
Utiliser
dans la méthode asynchrone de la "bibliothèque" possible. Cela permet de continuer à s'exécuter sur des threads de pool de threads ordinaires et à contourner le contexte de la demande ASP.NET.Évitez l'obstruction Fonctionnement; Le mode
ConfigureAwait(false)
Task
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!