목차
Async/Await 풀기: 메서드 래퍼 또는 배경 스레드?
비동기 메서드와 비동기 메서드 비교 대기 가능한 작업
백그라운드 스레드 실행을 위한 코드 조정
비동기 활성화 항복
비동기 코드 및 대기 테이블 연결
Task.Run의 메서드 래핑: 권장되지 않는 사례
Async/Await에 대한 추가 리소스
백엔드 개발 C++ 비동기/대기: 백그라운드 스레딩을 위해 'Task.Run'에 내 메서드를 래핑해야 합니까?

비동기/대기: 백그라운드 스레딩을 위해 'Task.Run'에 내 메서드를 래핑해야 합니까?

Jan 05, 2025 pm 12:31 PM

Async/Await: Should I Wrap My Method in `Task.Run` for Background Threading?

Async/Await 풀기: 메서드 래퍼 또는 배경 스레드?

async/await를 이해하려고 하면 딜레마가 발생합니다. 내부에 메서드를 캡슐화해야 합니까? 비동기 동작과 백그라운드 스레드 실행을 모두 달성하려면 Task.Run을 사용하시겠습니까?

비동기 메서드와 비동기 메서드 비교 대기 가능한 작업

"Async"는 실행을 시작하기 전에 호출 스레드에 제어권을 양보할 수 있는 메서드를 나타냅니다. 이 항복은 표현식을 기다리는 동안 발생합니다. 이와 대조적으로 MSDN에서 정의한 "비동기"(종종 오해의 소지가 있는 용어)는 별도의 스레드에서 실행되는 코드를 나타냅니다.

따로 "awaitable"은 wait 연산자와 함께 사용할 수 있는 유형을 설명합니다. 일반적인 대기 가능 항목에는 Task 및 Task<T>가 포함됩니다.

백그라운드 스레드 실행을 위한 코드 조정

대기 가능성을 유지하면서 백그라운드 스레드에서 메서드를 실행하려면 Task.Run을 활용하세요.

private Task&lt;int&gt; DoWorkAsync()
{
  return Task.Run(() =&gt; 1 + 2);
}
로그인 후 복사

그러나 이 접근 방식은 일반적으로 권장되지 않습니다.

비동기 활성화 항복

제어를 일시 중지하고 양보할 수 있는 비동기 메서드를 생성하려면 해당 메서드를 비동기로 선언하고 지정된 양보 지점에서 대기를 사용합니다.

private async Task&lt;int&gt; GetWebPageHtmlSizeAsync()
{
  var html = await client.GetAsync("http://www.example.com/");
  return html.Length;
}
로그인 후 복사

비동기 코드 및 대기 테이블 연결

비동기 코드는 Wait 표현식의 어웨이터블을 사용합니다. Awaitable은 다른 비동기 메서드이거나 Awaitable을 반환하는 동기 메서드일 수 있습니다.

Task.Run의 메서드 래핑: 권장되지 않는 사례

Task.Run 내에서 동기 메서드를 무분별하게 래핑하지 마세요. 대신 동기식 서명을 유지하고 소비자에게 래핑 옵션을 남겨둡니다.

Async/Await에 대한 추가 리소스

  • [Async/Await 기본 사항](https://blog.stephencleary.com/2012/02/async-await-fundamentals.html)
  • [MSDN 비동기 설명서](https://docs.microsoft.com/en-us /dotnet/csharp/programming-guide/concepts/async/)

위 내용은 비동기/대기: 백그라운드 스레딩을 위해 'Task.Run'에 내 메서드를 래핑해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어 함수 형식 문자 케이스 변환 단계 C 언어 함수 형식 문자 케이스 변환 단계 Mar 03, 2025 pm 05:53 PM

C 언어 함수 형식 문자 케이스 변환 단계

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? Mar 03, 2025 pm 05:52 PM

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

Gulc : C 도서관은 처음부터 구축되었습니다 Gulc : C 도서관은 처음부터 구축되었습니다 Mar 03, 2025 pm 05:46 PM

Gulc : C 도서관은 처음부터 구축되었습니다

C 언어 기능의 정의 및 호출 규칙은 무엇이며 C 언어 기능의 정의 및 호출 규칙은 무엇이며 Mar 03, 2025 pm 05:53 PM

C 언어 기능의 정의 및 호출 규칙은 무엇이며

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? Mar 12, 2025 pm 04:50 PM

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까?

뚜렷한 사용 및 문구 공유 뚜렷한 사용 및 문구 공유 Mar 03, 2025 pm 05:51 PM

뚜렷한 사용 및 문구 공유

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? 메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? Mar 03, 2025 pm 05:51 PM

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? Mar 12, 2025 pm 04:52 PM

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?

See all articles