WriteOnceBlockT
(只讀變數:儲存其第一個資料項並將其副本作為輸出傳遞。忽略所有其他資料項)
如果 BufferBlock 是 TPL 資料流中最基本的塊,則 WriteOnceBlock 是最簡單的。
它最多儲存一個值,一旦設定了該值,它將永遠不會被替換或覆蓋。
你可以將 WriteOnceBlock 視為類似於 C#中的只讀成員變數,除了不僅可以在建構函式中設定然後是不可變的,它只能設定一次然後是不可變的。
拆分任務的潛在輸出
public static async void SplitIntoBlocks(this Task<T> task,
out IPropagatorBlock<T> result,
out IPropagatorBlock<Exception> exception)
{
result = new WriteOnceBlock<T>(i => i);
exception = new WriteOnceBlock<Exception>(i => i);
try
{
result.Post(await task);
}
catch(Exception ex)
{
exception.Post(ex);
}
}