BatchBlockT

(將一定數量的連續資料項分組為資料項集合)

BatchBlock 將 N 個單個專案組合成一個批處理專案,表示為元素陣列。使用特定批處理大小建立例項,然後塊在收到該數量的元素後立即建立批處理,將批處理非同步輸出到輸出緩衝區。

BatchBlock 能夠在貪婪和非貪婪模式下執行。

  • 在預設貪婪模式下,從任意數量的源提供給塊的所有訊息都被接受並緩衝以轉換為批次。

    • 在非貪婪模式下,所有訊息都會從源中推遲,直到有足夠的訊息來源向塊提供訊息以建立批處理。因此,BatchBlock 可用於從 N 個源中的每一個接收 1 個元素,從 1 個源接收 N 個元素,以及在它們之間的無數選項。

StackOverflow 文件

將請求批處理為 100 個組以提交到資料庫

var batchRequests = new BatchBlock<Request>(batchSize:100);
var sendToDb = new ActionBlock<Request[]>(reqs => SubmitToDatabase(reqs));

batchRequests.LinkTo(sendToDb);

每秒建立一次批處理

var batch = new BatchBlock<T>(batchSize:Int32.MaxValue);
new Timer(() => { batch.TriggerBatch(); }).Change(1000, 1000);

Stephen Toub 介紹 TPL 資料流