> 백엔드 개발 > C++ > `Task.Result` vs `wait Task`: 언제 어느 것을 사용해야 합니까?

`Task.Result` vs `wait Task`: 언제 어느 것을 사용해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-08 09:02:41
원래의
421명이 탐색했습니다.

`Task.Result` vs. `await Task`: When Should You Use Which?

비동기 프로그래밍의 Task<T>.Resultawait 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>.ResultAggregateException으로 묶습니다.

모범 사례:

  • 백그라운드 작업에는 Task.Factory.StartNew을 피하세요. 효율성을 높이고 .NET 스레드 풀과의 통합을 개선하려면 대신 Task.Run을 사용하세요.
  • Task<T>.ResultTask.Factory.StartNew은 동적 작업 병렬 처리에 사용할 수 있지만 일반적으로 더 나은 응답성과 유지 관리성을 위해 await을 선호하는 비동기 프로그래밍 컨텍스트에서는 권장되지 않습니다. await을 사용하는 것이 비동기 작업에 선호되고 더욱 강력한 접근 방식입니다.

위 내용은 `Task.Result` vs `wait Task`: 언제 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿