2015-10-01 100 views
0

我的DataFlow流水線以BatchBlock開頭。我想在TriggerBatch()方法的幫助下觸發BatchBlock。我的批量大小可能是可變的,所以在創建Batchblock時,我放置了一個相當高的BatchSize,這並不是我所期望的。TPL Dataflow批量塊檢查輸入緩衝區中的元素

現在我想要調用TriggerBatch()方法,這取決於BatchBlock是否確實有一些元素可以實際觸發成批。有沒有辦法檢查Batchblock的內部緩衝區是否非空?如果不是的話,有人可以爲我提出一個相同的解決方案。 BatchBlock正在從多個線程供給Post()數據到Batchblock。不過,我希望有一種機制可以在觸發之前等到Batchblock中存在元素。基本上我不希望我的TriggerBatch()沒有結果。不幸的是,使用計時器不適合我。

在這一點上,我確實需要第三人意見,因爲我一直堅持這一段時間了。

+0

* *什麼是所需的行爲?何時以及爲什麼要觸發該批次?創建自定義塊並不難,事實上,您可能可以調整[MSDN關於創建自定義塊的文章]中的第一個滑動窗口示例(https://msdn.microsoft.com/zh-cn/library/hh228606 (v = vs.110).aspx),但你需要決定觸發條件是什麼 –

+0

爲什麼使用定時器不是一個選項? – RePierre

+0

@PanagiotisKanavos期望的行爲有點像這個問題http://stackoverflow.com/questions/32717337/data-propagation-in-tpl-dataflow-pipeline-with-batchblock-triggerbatch。我確實考慮過一個自定義塊,但對於我來說,構想也變得相當困難。我已經瀏覽了您所概述的MSDN,但不知何故無法將我的要求與它聯繫起來。我能想到的唯一方法是在轉換塊的幫助下(保存在該批處理塊之前)保留一個輸入列表,並在每次Batchblock上的Triggerbatch() – Ricky

回答