비동기 작동 :
와 의 미묘한 차이
언뜻보기에,이 두 코드는 매우 비슷해 보입니다.
await Task.Run(); return;
return Task.Run()
둘 다 호출 비동기 작업을 사용하지만 행동에는 미묘하고 중요한 차이가 있습니다.
비정상적인 의사 소통
주요 차이점은 비정상적인 치료입니다. 첫 번째 예에서, 비동기 방법이 나중에 비동기 방법을 기다리고있을 때
및
async Task TestAsync()
{
await Task.Run(() => DoSomeWork());
return;
}
로그인 후 복사
의 사용이 캡처되어 버릴 것입니다. 이를 통해 발신자는 이상을 우아하게 처리 할 수 있습니다.
Task TestAsync()
{
return Task.Run(() => DoSomeWork());
}
로그인 후 복사
반대로,
의 두 번째 예에서 의 예에서는 예외가 즉시 퍼지고 통화 메소드의 실행이 중단 될 수 있습니다. 이것은 예상치 못한 행동으로 이어질 수 있으며 비정상적인 치료가 어려워 질 수 있습니다. Task.Run()
위의 동기
또 다른 차이점은 동기 컨텍스트와 관련이 있습니다. 예제에서 의 작업은 호출 스레드의 동기식에서 실행됩니다. 대신, 예에서는 다른 스레드 풀의 맥락에서 작동합니다.
Dead Lock
비정형 동기화 컨텍스트로 GUI 애플리케이션에서 비동기 작업을 수행 할 때 메소드가 발생할 가능성이 높습니다. 예를 들어, 비동기 작업을 시작하고 UI 스레드에서
를 사용하면 교착 상태가 발생할 수 있습니다.
요약 await
DoSomeWork()
이 두 코드 조각의 결과는 비정상의 사용 및
의 사용과 다르기 때문에 주로 다릅니다. 비동기 연산의 경우 의 사용은 비정상적인 보급을 더 잘 제어하고 올바른 동기화 컨텍스트에서 올바르게 구현 될 수 있습니다. 위 내용은 await task.run () :`await task.run ()의 차이점은 무엇입니까? return;`및`return task.run ()`??의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!