Unerwartetes Verhalten - TPL DataFlow BatchBlock Weist Elemente ab, während TriggerBatch ausgeführt wird

9

Wenn Sie einen Batchblock mit gebundener Kapazität erstellen und triggerBatch aufrufen, während (parallel zu) ein neuer Artikel gebucht wird, schlägt das Posten eines neuen Artikels während der Trigger-Batch-Ausführungszeit fehl.

Der Aufruf der Trigger-Charge (jede X-Zeit) wird durchgeführt, um sicherzustellen, dass die Daten nicht zu lange im Block verzögert werden, wenn der eingehende Datenstrom angehalten oder verlangsamt wurde.

Der folgende Code gibt einige "post failure" -Ereignisse aus. Zum Beispiel:

%Vor%

* Beachten Sie, dass dieses Szenario nur reproduzierbar ist, wenn der BatchBlock gebunden ist.

Fehle ich etwas oder ist es ein Problem mit BatchBlock?

    
Al Yaros 25.02.2016, 12:12
quelle

1 Antwort

3

Der BatchBlock lehnt das Objekt nicht wirklich ab, es versucht es zu verschieben. Nur im Fall von Post() ist das Aufschieben keine Option. Ein einfacher Weg, dies zu beheben wäre% zu verwenden co_de% anstatt await batchBlock.SendAsync(i) (das auch bedeutet, dass Sie batchBlock.Post(i) auf Task.Factory.StartNew(() => ändern müssen).

Warum passiert das? Nach den Quellcode , wenn das Task.Run(async () => begrenzt ist, BatchBlock asynchron verarbeitet und während es verarbeitet wird, werden keine neuen Produkte akzeptiert.

In jedem Fall sollten Sie nicht erwarten, dass TriggerBatch() wird immer wieder zurückkehrt Post() auf einem beschränkten Block, wenn der Block voll ist, true wird auch das Rück Post() .

    
svick 25.02.2016 17:38
quelle

Tags und Links