멀티 스레드 애플리케이션에서는 실행 흐름을 이해하는 것이 중요합니다. 수수께끼의 'await' 키워드를 접할 때 개발자는 종종 "'await' 이후의 코드 재개를 조정하는 스레드는 무엇입니까?"라는 질문과 씨름합니다.
다음 코드 조각을 고려하세요.
private void MyMethod() { Task task = MyAsyncMethod(); task.Wait(); } private async Task MyAsyncMethod() { //Code before await await MyOtherAsyncMethod(); //Code after await }
이 코드가 단일 스레드 애플리케이션 내에서 작동한다고 가정하면 당황스러워집니다. 스레드가 'await' 키워드 다음의 코드를 어떻게 실행할 수 있습니까? 'task.Wait()'에 의해 잠겨 있습니까?
답은 'await' 키워드의 정교한 동작에 있습니다. 호출자에게 다시 제어권을 넘겨주므로 다른 비동기 작업을 진행할 수 있습니다. '대기' 작업('대기' 이후의 코드)의 연속은 현재 동기화 컨텍스트를 준수하는 스레드에서 실행되도록 예약됩니다.
이 시나리오에서 'MyMethod()' 함수가 UI 스레드에서 실행 중인 경우 'MyOtherAsyncMethod()'가 완료되면 'await' 이후의 코드도 UI 스레드에서 실행됩니다.
그러나 연속 작업에 사용되는 정확한 스레드가 보장되지 않는다는 점에 유의하는 것이 중요합니다. 다중 스레드 애플리케이션에서는 스레드 풀의 사용 가능한 스레드에서 연속이 실행될 수 있습니다. 그러나 동기화 컨텍스트는 'await' 이후의 코드가 원래 스레드와 관련하여 일관된 방식으로 실행되도록 보장합니다.
주어진 예에서 'task.Wait()'를 호출하면 기본 스레드가 무기한 차단되어 계속 실행되는 것을 방지합니다. 이를 방지하려면 메인 스레드를 차단하지 않고 비동기 작업을 올바르게 기다려야 합니다.
위 내용은 멀티스레드 애플리케이션에서 'await' 키워드 다음에 코드를 실행하는 스레드는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!