(只读变量:记住它的第一个数据项并将其副本作为输出传递。忽略所有其他数据项)
如果 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); } }