비동기 프로그래밍에는 종종 await
및 Task.Run
이 포함되어 혼란을 야기할 수 있습니다. 이 기사에서는 구체적인 예를 통해 차이점을 명확히 설명합니다.
다음 코드 조각을 분석해 보겠습니다.
<code class="language-csharp">await Task.Run(() => LongProcess());</code>
<code class="language-csharp">await LongProcess();</code>
LongProcess
은 await ExecuteReaderAsync()
을 사용하여 여러 데이터베이스 호출을 수행하는 비동기 방식입니다.
async
/await
이 본질적으로 여러 스레드를 생성하지 않는다는 점을 명확히 하는 것이 중요합니다. 단일 스레드가 모든 것을 처리합니다.
Async
/await
을 사용하면 스레드가 비동기 작업을 기다리는 동안 다른 작업을 수행할 수 있습니다. 요리사가 야채를 썰고 오븐을 확인하는 일을 멀티태스킹하는 것을 상상해 보세요. 스레드는 await
을 만날 때까지 작업 간을 유사하게 전환하고 나중에 실행을 재개합니다.
Task.Run
은 완료를 즉시 기다리지 않고 비동기 작업을 시작할 때 유용합니다. 이는 비동기 작업이 실행되는 동안 사용자 입력이나 기타 작업에 대한 스레드 응답성을 유지할 때 유리합니다.
이 예에서는 두 접근 방식 모두 동일한 결과를 산출합니다. await Task.Run(...)
은 Task.Run
이 관리하는 별도의 스레드에서 비동기 작업을 실행합니다. 그러나 현재 스레드는 여전히 완료를 기다리고 있으므로 LongProcess
.
async
/await
의 뉘앙스를 이해하는 것은 효율적인 비동기 프로그래밍에 매우 중요합니다. 이 특정한 경우에는 await Task.Run(...)
과 await
모두 동일한 결과를 얻습니다. 최적의 선택은 비동기 작업 중에 현재 스레드의 응답성을 유지해야 하는지 여부에 따라 달라집니다.
위 내용은 Await Task.Run(() => ...) 대 Await LongProcess(): 각각을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!