WriteOnceBlockT

(只讀變數:儲存其第一個資料項並將其副本作為輸出傳遞。忽略所有其他資料項)

如果 BufferBlock 是 TPL 資料流中最基本的塊,則 WriteOnceBlock 是最簡單的。
它最多儲存一個值,一旦設定了該值,它將永遠不會被替換或覆蓋。

你可以將 WriteOnceBlock 視為類似於 C#中的只讀成員變數,除了不僅可以在建構函式中設定然後是不可變的,它只能設定一次然後是不可變的。

StackOverflow 文件

拆分任務的潛在輸出

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); 
    }
}

Stephen Toub 介紹 TPL 資料流