Nachdem ich mit dem Datenfluss herumgespielt habe, bin ich auf ein neues Problem gestoßen. Ich möchte die Inputqueue aller Blöcke begrenzen. Mein produzierender Block (ActionBlock) erstellt 5000 Elemente sehr schnell und postet sie in einem Broadcastblock. Wenn ich also die BoundedCapacity des Broadcastblocks auf 100 setze, wirft er eine Menge Daten weg. Aber ich würde es bevorzugen, wenn der produzierende Block auf neue Slots in der Inputqueue meines Pufferblocks wartet.
Gibt es eine Möglichkeit, dieses Problem loszuwerden?
Genau dafür steht BufferBlock
. Wenn Sie BoundedCapacity
setzen und es voll wird, verzögert es den Empfang von Nachrichten, bis jemand sie konsumiert. Dies bedeutet, dass zum Beispiel Post()
blockiert und SendAsync()
eine unvollendete Task
zurückgibt.
BEARBEITEN: Es gibt keinen integrierten Block, der an mehrere Ziele sendet und niemals Daten wegwirft. Aber Sie können einfach selbst eine aus ActionBlock
und sending loop:
In diesem Code wird davon ausgegangen, dass Sie die Daten für jedes Ziel nicht klonen müssen und dass sich die Liste der Ziele niemals ändert. Den Code dafür zu ändern sollte ziemlich einfach sein.
Tags und Links .net c# task-parallel-library tpl-dataflow