Heim >Backend-Entwicklung >C++ >Wie kann TPL Dataflow gleichzeitige asynchrone Aufgaben einschränken?

Wie kann TPL Dataflow gleichzeitige asynchrone Aufgaben einschränken?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-22 20:22:12545Durchsuche

How Can TPL Dataflow Limit Concurrent Asynchronous Tasks?

Verwenden Sie TPL Dataflow, um die Anzahl gleichzeitiger asynchroner Aufgaben zu begrenzen

In diesem Artikel wird erläutert, wie Sie mit TPL Dataflow die Anzahl gleichzeitiger asynchroner Aufgaben effizient begrenzen und gleichzeitig die Vorteile von Multithreading voll ausnutzen können. Im Vergleich zum BlockingCollection-Ansatz mit SemaphoreSlim und ThrottleTasksAsync bietet TPL Dataflow eine sauberere Lösung.

Durch die Konfiguration des TransformBlock-Attributs von MaxDegreeOfParallelism können wir direkt die maximale Anzahl gleichzeitig ausgeführter Aufgaben angeben. Fügen Sie URLs zu TransformBlock hinzu und diese werden asynchron verarbeitet. Sobald die Verarbeitung abgeschlossen ist, stehen die Ergebnisse zur Verfügung.

<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>

Es ist zu beachten, dass TransformBlock Ein- und Ausgabe puffert. Daher verbinden wir es mit BufferBlock, um zu verhindern, dass TransformBlock blockiert, bis alle Ausgabeelemente verbraucht sind. Die BufferBlock.TryReceiveAll-Methode wird verwendet, um alle Ergebnisse abzurufen, nachdem TransformBlock abgeschlossen ist.

Das obige ist der detaillierte Inhalt vonWie kann TPL Dataflow gleichzeitige asynchrone Aufgaben einschränken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn