비동기/대기: 백그라운드 스레딩을 위해 'Task.Run'에 내 메서드를 래핑해야 합니까?
Jan 05, 2025 pm 12:31 PMAsync/Await 풀기: 메서드 래퍼 또는 배경 스레드?
async/await를 이해하려고 하면 딜레마가 발생합니다. 내부에 메서드를 캡슐화해야 합니까? 비동기 동작과 백그라운드 스레드 실행을 모두 달성하려면 Task.Run을 사용하시겠습니까?
비동기 메서드와 비동기 메서드 비교 대기 가능한 작업
"Async"는 실행을 시작하기 전에 호출 스레드에 제어권을 양보할 수 있는 메서드를 나타냅니다. 이 항복은 표현식을 기다리는 동안 발생합니다. 이와 대조적으로 MSDN에서 정의한 "비동기"(종종 오해의 소지가 있는 용어)는 별도의 스레드에서 실행되는 코드를 나타냅니다.
따로 "awaitable"은 wait 연산자와 함께 사용할 수 있는 유형을 설명합니다. 일반적인 대기 가능 항목에는 Task 및 Task<T>가 포함됩니다.
백그라운드 스레드 실행을 위한 코드 조정
대기 가능성을 유지하면서 백그라운드 스레드에서 메서드를 실행하려면 Task.Run을 활용하세요.
private Task<int> DoWorkAsync() { return Task.Run(() => 1 + 2); }
그러나 이 접근 방식은 일반적으로 권장되지 않습니다.
비동기 활성화 항복
제어를 일시 중지하고 양보할 수 있는 비동기 메서드를 생성하려면 해당 메서드를 비동기로 선언하고 지정된 양보 지점에서 대기를 사용합니다.
private async Task<int> 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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