2016-11-10 1 views
4

C#을 사용하여 .NET에서 비동기 프로그래밍을 처음 사용합니다. 지금까지 이해해온 내용은 ​​다음과 같습니다.비동기 프로그래밍의 스레드 상태 관리

웹 서비스 나 데이터베이스가 데이터를 반환하기를 기다리는 스레드는 비동기 프로그래밍을 사용하여 데이터가 수신 될 때까지 새 요청을 처리 할 수 ​​있습니다.

데이터가 수신되면 스레드가 다시 시작되고 해당 호출 이후에 오는 코드 처리가 계속됩니다.

이제 비동기 호출이 실행 된 지점부터 실행을 시작할 수 있도록 스레드의 상태를 관리하는 방법에 대해 자세히 알고 싶었습니다.

스택을 사용하여 처리하는 경우 일부 프로세스에서 프로세스에 대한 통찰력을 제공 할 수 있습니까?

감사합니다,

Mayank

+2

Myabe 여기에서 다음을 볼 수 있습니다. https://msdn.microsoft.com/en-us/library/mt674882.aspx – Yanga

+3

모든 것의 중심에는 겸손한 대리자가 있습니다. 메서드와 개체를 모두 결합한 것입니다. 에 호출됩니다. 거기에서 우리는 [closure] (http://stackoverflow.com/questions/428617/)를 얻었고 closure로부터는 async/await에 의해 사용되는 상태 머신을 얻습니다. 대리자의 개체를 사용하지 않을 때는 상태를 명시 적으로 전달해야합니다 (['IAsyncResult.AsyncState'] (https://msdn.microsoft.com/library/system.iasyncresult.asyncstate)). 전체 책은이 주제에 쓰여질 수 있으며 실제로 작성된 것입니다. –

+1

비동기/대기 코드는 필요한 컨텍스트 필드가 모두 포함 된 IAsyncStateMachine을 구현하는 구조체와 각 부분 작업이 완료 될 때 호출되는 단일 MoveNext 메서드로 실제로 변환됩니다. 따라서 다른 인스턴스 메소드에서 BeginInvoke를 호출하는 방법을 이해한다면 상태가 어떻게 전달되고 있는지 이해해야합니다. Tl; 지역 변수는 스택에 배치되지 않지만 구조체에 배치됩니다 (실제로 곧 박스형이되어 힙에 배치됩니다). – Groo

답변

0

지금, 나는 그것이 비동기 호출이 한 지점부터 실행을 시작할 수 있도록 상태가 스레드 관리 방법에 대해 자세히 알고 싶었다.

비동기 메서드는 더 작은 청크로 분할됩니다. 기본적으로 async 메서드를 컴파일 할 때 await 키워드마다 새 메서드가 생성됩니다.

큰 단순화이며 모두 뒤에서 이루어 지므로 실제로 사용하기 위해 어떻게 작동하는지 알 필요가 없습니다.