>백엔드 개발 >C++ >await task.run () :`await task.run ()의 차이점은 무엇입니까? return;`및`return task.run ()`??

await task.run () :`await task.run ()의 차이점은 무엇입니까? return;`및`return task.run ()`??

DDD
DDD원래의
2025-01-30 03:46:10245검색

비동기 작동 : Await Task.Run(): What's the Difference Between `await Task.Run(); return;` and `return Task.Run()`?
의 미묘한 차이 언뜻보기에,이 두 코드는 매우 비슷해 보입니다. await Task.Run(); return; return Task.Run() 둘 다 호출 비동기 작업을 사용하지만 행동에는 미묘하고 중요한 차이가 있습니다.

비정상적인 의사 소통

주요 차이점은 비정상적인 치료입니다. 첫 번째 예에서, 비동기 방법이 나중에 비동기 방법을 기다리고있을 때

<code class="language-csharp">async Task TestAsync() 
{
    await Task.Run(() => DoSomeWork());
    return;
}</code>
의 사용이 캡처되어 버릴 것입니다. 이를 통해 발신자는 이상을 우아하게 처리 할 수 ​​있습니다.
<code class="language-csharp">Task TestAsync() 
{
    return Task.Run(() => DoSomeWork());
}</code>
반대로, 의 두 번째 예에서

의 예에서는 예외가 즉시 퍼지고 통화 메소드의 실행이 중단 될 수 있습니다. 이것은 예상치 못한 행동으로 이어질 수 있으며 비정상적인 치료가 어려워 질 수 있습니다. Task.Run() 위의 동기

또 다른 차이점은 동기 컨텍스트와 관련이 있습니다. 예제에서 의 작업은 호출 스레드의 동기식에서 실행됩니다. 대신, 예에서는 다른 스레드 풀의 맥락에서 작동합니다.

Dead Lock 비정형 동기화 컨텍스트로 GUI 애플리케이션에서 비동기 작업을 수행 할 때 메소드가 발생할 가능성이 높습니다. 예를 들어, 비동기 작업을 시작하고 UI 스레드에서

를 사용하면 교착 상태가 발생할 수 있습니다.

요약 await DoSomeWork() 이 두 코드 조각의 결과는 비정상의 사용 및

의 사용과 다르기 때문에 주로 다릅니다. 비동기 연산의 경우 의 사용은 비정상적인 보급을 더 잘 제어하고 올바른 동기화 컨텍스트에서 올바르게 구현 될 수 있습니다.

위 내용은 await task.run () :`await task.run ()의 차이점은 무엇입니까? return;`및`return task.run ()`??의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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