비동기 프로그래밍의 Task<T>.Result
및 await Task<T>
이해
비동기 프로그래밍에서는 await Task<T>
과 Task<T>.Result
중 하나를 선택하는 것이 성능과 예외 처리에 큰 영향을 미칩니다. 주요 차이점을 살펴보겠습니다.
GetName
방법은 두 가지 접근 방식을 모두 보여줍니다.
Task<T>.Result
사용:
<code class="language-csharp">public async Task<string> GetName(int id) { Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id)); return nameTask.Result; }</code>
nameTask.Result
작업이 완료될 때까지 현재 스레드를 차단합니다. 이는 장기 실행 작업에는 비효율적이며 잠재적으로 애플리케이션이 정지될 수 있습니다.
await Task<T>
사용:
<code class="language-csharp">public async Task<string> GetName(int id) { Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id)); return await nameTask; }</code>
await nameTask
호출 스레드를 해제하여 다른 작업이 동시에 실행될 수 있도록 합니다. 메서드는 nameTask
이 완료될 때만 재개됩니다.
중요한 구별:
Task<T>.Result
블록; await Task<T>
그렇지 않습니다.await Task<T>
는 예외를 직접 전파합니다. Task<T>.Result
은 AggregateException
으로 묶습니다.모범 사례:
Task.Factory.StartNew
을 피하세요. 효율성을 높이고 .NET 스레드 풀과의 통합을 개선하려면 대신 Task.Run
을 사용하세요.Task<T>.Result
및 Task.Factory.StartNew
은 동적 작업 병렬 처리에 사용할 수 있지만 일반적으로 더 나은 응답성과 유지 관리성을 위해 await
을 선호하는 비동기 프로그래밍 컨텍스트에서는 권장되지 않습니다. await
을 사용하는 것이 비동기 작업에 선호되고 더욱 강력한 접근 방식입니다.위 내용은 `Task.Result` vs `wait Task`: 언제 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!