2015-09-24 76 views
1

我的DataFlow流水線以BatchBlock開頭,幾個任務將項目發佈到此BatchBlock。現在,BatchBlock根據定時器藉助TriggerBatch()方法將數據傳播到下一個塊。TPL數據流批塊重複元素

在這種情況下,您可以假定在創建BatchBlock期間提供的批量大小都不是(非常高),即每個觸發批次的大小可能不同。

就在觸發BatchBlock之前,我想刪除批處理中存在的即將傳播到管道中下一個塊的所有重複項。有沒有辦法可以做到這一點?

回答

1

您不能添加或刪除塊中存儲的項目。

但是,您可以在BatchBlock之後添加一個TransformBlock,它刪除當前批處理的重複項並向前移動批處理。請記住,這意味着您的批次可能會更小。

假設平等成員正確實現它可以是這樣的:

var transformBlock = new TransformBlock<int[], IEnumerable<int>>(_ => new HashSet<int>(_)); 
+0

謝謝你的回答,看完後我感到愚蠢,爲什麼我不能認爲:)感謝很多! – Ricky