Maison > développement back-end > C++ > Pourquoi HttpClient.GetAsync(...) se bloque-t-il lors de l'utilisation d'Await/Async dans .NET 4.5 ?

Pourquoi HttpClient.GetAsync(...) se bloque-t-il lors de l'utilisation d'Await/Async dans .NET 4.5 ?

Patricia Arquette
Libérer: 2025-01-25 13:41:09
original
822 Les gens l'ont consulté

Why Does HttpClient.GetAsync(...) Deadlock When Using Await/Async in .NET 4.5?

.net 4.5 utilise asynchrone / attente et httpclient.getasync (...) Problème de blocage

Question:

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).
  1. recevoir la réponse HTTP et terminer la tâche.
  2. Explication:

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.
  1. En suivant ces critères, vous pouvez vous assurer que la poursuite de la méthode asyncawait_getsomEdataasync fonctionne sur le thread d'arrière-plan et évitez de bloquer le thread de demande ASP.NET pour empêcher les verrous morts.
  2. Plus d'informations:

Asynchronous / Waiting Introduction

asynchrone / en attente de questions et réponses courantes

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal