2017-11-08 4 views
-1

async/await을 배우고 있으며 ConfigureAwait를 async/await와 함께 사용하는 것에 대해 언급 한 블로그를 발견했습니다.C에서 ConfigureAwait를 false로 사용하는 실제적인 설명 #

ConfigureAwait 부울 continueOnCapturedContext 매개 변수를 허용합니다 : 기본 동작을 사용하는 진정한 의미를 전달하고, 거짓 전달하는 시스템이 강제 원본 문장에 다시 대리자의 호출을 마샬링 할 수 없음을 의미 그것은이 같은의 읽기 대신 시스템이 적합하다고 생각할 때마다 위임을 실행하십시오.

정보가 자세히 알려지지 않았으므로 누구나 실제 사용 예를 설명 할 수 있습니다. 또한 추가로 검색하여 HTTP 호출과 함께 사용해야한다는 것을 알았지 만 왜 사용해야하는지에 대한 구체적인 대답을 얻지 못했습니다.

참조 링크 : https://blogs.msdn.microsoft.com/windowsappdev/2012/04/24/diving-deep-with-winrt-and-await/

답변

1

이 단일 스레드가 여러 작업을 처리하는 시나리오에 유용는 WPF 또는 IIS에서 호스트 스레드 디스패처 스레드를 생각한다.

.ConfigureAwait(false)을 지정하지 않고 요청에 많은 시간이 걸리면 Asp.Net (Windows 및 전체 .net, IIS에서 호스팅 됨)에서 가장 분명합니다. 동일한 w3wp.exe 프로세스.

전체 앱이 본질적으로 차단되었습니다.

이 작업은 스레드 풀의 다른 스레드를 사용하여 컨트롤이이 스택으로 돌아갈 수 있다는 것을 의미합니다.이 스레드는 기본적으로 주 스레드를 차단 해제합니다.

+0

대답은 Thnx입니다. 하지만 코드가 비동기 일 때 별도의 스레드에서 실행되지 않습니까? 왜 우리는 ConfigureAwait를 돌보아야합니까? – Dishant

+0

코드가 실행되고 있지 않습니다. async는 IO 작업 (네트워크, 디스크 등)을 기다리는 동안 아무 것도하지 않아도 작동합니다. 그런 다음 컨트롤은 async 바로 다음 줄로 반환되고 THAT는 일부 스레드에서 발생합니다. ConfigureAwait를 사용하면 어느 것을 선택할 수 있습니다. – zaitsman

+1

@Dishant 아니요, Stephen Toub은 [여기] (https://blogs.msdn.microsoft.com/pfxteam/2011/01/13/await-anything/) 또는 다른 곳에서 ** async ** in and of 스레드 자체와는 아무런 관련이 없습니다. 설계 패러다임으로서 동시성을 촉진 할 수 있지만 기본적으로 그렇지 않습니다. 기본적으로 async는 * single * 스레드가 항상 앞으로 진행될 수 있도록하는 방법으로 생각할 수 있습니다. 다른 방법으로는 그렇지 않을 때마다 차단하는 대신 다른 보류중인 작업을 수행하도록 되돌아갑니다. –

관련 문제