수많은 비동기 작업의 동시 실행을 관리하려면 작업 제한이 필요한 경우가 많습니다. TPL(작업 병렬 라이브러리) 데이터 흐름은 이러한 일반적인 과제에 대한 우아한 솔루션을 제공합니다.
TPL Dataflow의 TransformBlock<TInput, TOutput>
은 병렬 작업 실행의 최대 수준을 제어하기 위한 강력한 메커니즘을 제공합니다. 이를 통해 데이터 스트림(예: 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); //or await downloader.SendAsync(url); downloader.Complete(); await downloader.Completion; IList<HttpResponse> responses; if (buffer.TryReceiveAll(out responses)) { //process responses }</code>
이 코드는 동시 다운로드를 50으로 제한하는 TransformBlock
(downloader
이라는 이름)를 생성합니다. downloader
는 BufferBlock
(buffer
)에 연결되어 HttpResponse
개체를 보유합니다. 모든 URL을 제출한 후 완료 신호를 보내고 downloader
의 완료를 기다립니다. 마지막으로 수집된 응답은 buffer
.
TPL Dataflow는 수동 제한 방법에 비해 상당한 이점을 제공합니다.
TransformBlock
이 입력과 출력을 버퍼링한다는 점에 유의하는 것이 중요합니다. 잠재적 교착상태를 방지하려면 위와 같이 별도의 BufferBlock
에 연결하고 완료 후 결과를 검색하는 것이 좋습니다.
위 내용은 TPL 데이터 흐름은 어떻게 비동기 작업 제한을 단순화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!