>백엔드 개발 >C++ >.NET 4.5에서 `HttpClient.GetAsync()`가 Async/Await와 교착 상태에 빠지는 이유는 무엇입니까?

.NET 4.5에서 `HttpClient.GetAsync()`가 Async/Await와 교착 상태에 빠지는 이유는 무엇입니까?

DDD
DDD원래의
2025-01-25 13:31:10731검색

<..> .NET 4.5 및 비동기/기다렸다가 죽은 자물쇠가 발생했습니다

.NET 4.5에서 클래스를 사용할 때 모드와 결합 할 때 경우에 따라 결과의 결과가 무기한 발생할 수 있습니다. 제공된 코드 에서이 동작은 "Test5"사례에서 관찰되었으며 클래스에 오류가 있는지 또는 API가 있는지 여부의 문제를 일으켰습니다. 자물쇠의 이유 HttpClient.GetAsync() 데드 잠금은 모드에서 사용하는 스레드 컨텍스트 및 동기화 메커니즘으로 인해 발생합니다. ASP.NET 요청이 가되기를 기다리는 경우,이 메소드는 일반적으로 캡처 된

에서 복구되어 컨텍스트 매장량이 필요합니다.

그러나 그러나 test5의 경우 HttpClient는 , 즉 의 결과를 기다릴 때 차단 작업을 시작했습니다. 이것은 요청 컨텍스트와 함께 스레드를 차단하여 컨텍스트에서 async/await의 완료를 방지합니다. httpClient.GetAsync(...) Async/Await 및 Httpclient의 모범 사례 HttpClient 이 데어로를 피하려면 다음 모범 사례를 사용하는 것이 좋습니다.

가능한 한 "라이브러리"의 비동기 방법에서 를 사용하십시오. 이를 통해 일반 스레드 풀 스레드에서 계속 실행되고 ASP.NET 요청 컨텍스트를 우회 할 수 있습니다. 방해를 피하십시오.

이러한 관행을 따르면 async/await 사용의 두 가지 이점을 동시에 사용할 수 있습니다. 별도의 스레드 풀 스레드에서 실행하는 것은 ASP.NET 요청 없이도 계속되고 컨트롤러 자체를 비동기로 유지합니다. 스레드 차단 요청을 방지합니다 Task

위 내용은 .NET 4.5에서 `HttpClient.GetAsync()`가 Async/Await와 교착 상태에 빠지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.