Async/Await 이해: Task.Run을 사용해야 하는 경우
비동기 프로그래밍 영역에서는 비동기 메서드( 비동기) 및 비동기 실행(백그라운드 스레딩). 미묘한 차이를 살펴보기 위해 다음 시나리오를 살펴보겠습니다.
시나리오 1: 백그라운드 스레딩 없음
private async Task DoWork1Async() { int result = 1 + 2; }
이 예에서 메서드는 비동기로 표시되어 있지만 백그라운드 실행이 필요하지 않은 간단한 작업을 수행합니다. 따라서 기다리는 DoWork1Async()는 동기적으로 실행됩니다.
시나리오 2: 백그라운드 스레드에서 실행
private async Task DoWork2Async() { Task.Run( () => { int result = 1 + 2; }); }
여기서 메서드는 다시 비동기로 표시되지만, Task.Run에서 실제 작업을 래핑합니다. 이렇게 하면 작업이 백그라운드 스레드에서 실행됩니다. 그러나 백그라운드 스레드 작업이 대기 중이 아니기 때문에 기다리는 DoWork2Async()는 여전히 동기적으로 실행됩니다.
메서드 반환 유형 및 비동기 동작
Async의 반환 유형 메서드는 비동기 동작에도 영향을 미칠 수 있습니다. Task 또는 Task를 반환하는 메서드
비동기 실행을 위한 Task.Run
메서드를 대기 가능하게 만들고 해당 작업을 백그라운드 스레드에서 실행하려면 Task.Run을 사용하여 새 메서드를 만들어야 합니다. task. 이 접근 방식은 동기 코드와 비동기 코드 간의 명확한 구분을 유지할 수 있기 때문에 Task.Run에서 전체 메서드를 래핑하는 것보다 더 적합합니다.
private Task<int> DoWorkAsync() // No async because the method does not need await { return Task.Run(() => { return 1 + 2; }); }
모범 사례
위 내용은 Async/Await와 함께 `Task.Run`을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!