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