我想知道是否可以更改数据块的完成状态?
例如,我标记了一个var block = new BufferBlock<int>();
数据块,其中包含block.Complete()
。该块链接到其他数据块。我想知道是否可以通过将其完成状态更改回其原始状态来使block
再次运行。
如果不可能,我怎么能执行多次运行,包括完成,而不必a)去链接所有块,b)重新实例化所有块,c)再次重新链接所有块?
任何可以简化运行数据流周期任务的想法,包括完成链中的每个块而无需重新创建整个框架?
由于
答案 0 :(得分:4)
不,您不能“完成”已完成的数据流块。我认为你应该做的是为每条消息添加一个标志,说明它是否是运行中的最后一条消息。为了简化它,你可以创建一组辅助方法,如:
public static TransformBlock<Tuple<TInput, bool>, Tuple<TOutput, bool>>
CreateEnhancedTransformBlock<TInput, TOutput>(Func<TInput, TOutput> transform)
{
return new TransformBlock<Tuple<TInput, bool>, Tuple<TOutput, bool>>(
tuple => Tuple.Create(transform(tuple.Item1), tuple.Item2));
}
这样,您输入的transform
代表只处理TInput
和TOuput
,并且该标记会随每条消息一起转移。