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 数据流