TPL Dataflow를 사용하여 동시 비동기 작업 수 제한
이 기사에서는 TPL Dataflow를 사용하여 멀티스레딩을 최대한 활용하면서 동시 비동기 작업 수를 효율적으로 제한하는 방법을 살펴봅니다. BlockingCollection
및 SemaphoreSlim
을 사용하는 ThrottleTasksAsync
접근 방식과 비교할 때 TPL Dataflow는 더 깔끔한 솔루션을 제공합니다.
TransformBlock
의 MaxDegreeOfParallelism
속성을 구성하면 동시에 실행되는 최대 작업 수를 직접 지정할 수 있습니다. TransformBlock
에 URL을 추가하면 비동기적으로 처리됩니다. 처리가 완료되면 결과를 사용할 수 있습니다.
<code class="language-csharp">var downloader = new TransformBlock<string, HttpResponse>( url => Download(url), new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 50 } ); var buffer = new BufferBlock<HttpResponse>(); downloader.LinkTo(buffer); foreach (var url in urls) downloader.Post(url); downloader.Complete(); await downloader.Completion; IList<HttpResponse> responses; if (buffer.TryReceiveAll(out responses)) { // 处理结果 }</code>
TransformBlock
은 입력과 출력을 버퍼링한다는 점에 유의해야 합니다. 따라서 모든 출력 항목이 소비될 때까지 BufferBlock
이 차단되는 것을 방지하기 위해 TransformBlock
과 연결합니다. BufferBlock.TryReceiveAll
메소드는 TransformBlock
이 완료된 후 모든 결과를 검색하는 데 사용됩니다.
위 내용은 TPL 데이터 흐름이 동시 비동기 작업을 어떻게 제한할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!