C#에서 여러 비동기 작업을 효율적으로 처리
비동기 API 클라이언트를 다룰 때는 여러 작업을 시작하고 완료를 동기화하는 가장 효율적인 방법을 결정하는 것이 중요합니다. 이 기사에서는 두 가지 일반적인 기술을 살펴보고 최대 성능을 위해 권장되는 대안을 소개합니다.
일반적인 방법
Parallel.ForEach
및 .Wait()
사용:
<code class="language-csharp"> Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());</code>
이 접근 방식은 작업을 병렬로 실행하지만 완료될 때까지 각 작업의 스레드를 차단합니다. 따라서 네트워크 호출에 많은 시간이 걸리면 스레드는 유휴 상태로 유지됩니다.
사용 Task.WaitAll
:
<code class="language-csharp"> Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());</code>
이 코드는 모든 작업이 완료될 때까지 기다리며 모든 작업이 완료될 때까지 현재 스레드를 차단합니다.
권장 방법
최적의 비동기 실행을 위해서는 Task.WhenAll
을 사용하는 것이 좋습니다.
<code class="language-csharp">public async Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
이 방법은 작업을 병렬로 시작하고 현재 스레드가 작업이 완료될 때까지 기다리는 동안 다른 작업을 계속 실행할 수 있도록 합니다. 이렇게 하면 CPU 사용량이 최적화되고 응답성이 유지됩니다.
코드를 최대한 단순화하려면 기다리지 않고 다음 코드로 충분합니다.
<code class="language-csharp">public Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; return Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
Task.WhenAll
을 사용하면 스레드 효율성이나 시스템 응답성을 저하시키지 않고 여러 비동기 작업을 병렬로 효율적으로 실행할 수 있습니다.
위 내용은 C#에서 여러 비동기 작업을 처리하는 가장 효율적인 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!