async/await를 이해하려고 하면 딜레마가 발생합니다. 내부에 메서드를 캡슐화해야 합니까? 비동기 동작과 백그라운드 스레드 실행을 모두 달성하려면 Task.Run을 사용하시겠습니까?
"Async"는 실행을 시작하기 전에 호출 스레드에 제어권을 양보할 수 있는 메서드를 나타냅니다. 이 항복은 표현식을 기다리는 동안 발생합니다. 이와 대조적으로 MSDN에서 정의한 "비동기"(종종 오해의 소지가 있는 용어)는 별도의 스레드에서 실행되는 코드를 나타냅니다.
따로 "awaitable"은 wait 연산자와 함께 사용할 수 있는 유형을 설명합니다. 일반적인 대기 가능 항목에는 Task 및 Task
대기 가능성을 유지하면서 백그라운드 스레드에서 메서드를 실행하려면 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'에 내 메서드를 래핑해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!