C#写一次块

例子

(只读变量:记住它的第一个数据项并将其副本作为输出传递。忽略所有其他数据项)

如果 BufferBlock 是 TPL Dataflow 中最基本的块,那么 WriteOnceBlock 是最简单的。
它最多存储一个值,并且一旦设置了该值,它将永远不会被替换或覆盖。

您可以将 WriteOnceBlock in 视为类似于 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); 
    }
}

Stephen Toub 对 TPL 数据流的介绍