任务数据流,数据块是否可以从完成状态更改?

Mat*_*olf 5 c# task-parallel-library tpl-dataflow

我想知道是否可以更改数据块的完成状态?

例如,我标记了一个var block = new BufferBlock<int>();完整的数据块block.Complete().该块链接到其他数据块.我想知道我是否可以block通过将其完成状态更改回原来的完整状态来再次运行.

如果不可能,我怎么能执行多次运行,包括完成,而不必a)解除所有块的链接,b)重新实例化所有块,c)再次重新链接所有块?

任何可以简化运行数据流周期任务的想法,包括完成链中的每个块而不必重新创建整个框架?

谢谢

svi*_*ick 4

不,您不能 \xe2\x80\x9cuncomplete\xe2\x80\x9d 一个已完成的数据流块。我认为您应该做的是向每条消息添加一个标志,表明它是否是运行中的最后一条消息。为了使使用它更简单,您可以创建一组辅助方法,例如:

\n\n
public static TransformBlock<Tuple<TInput, bool>, Tuple<TOutput, bool>>\n    CreateEnhancedTransformBlock<TInput, TOutput>(Func<TInput, TOutput> transform)\n{\n    return new TransformBlock<Tuple<TInput, bool>, Tuple<TOutput, bool>>(\n        tuple => Tuple.Create(transform(tuple.Item1), tuple.Item2));\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这样,您输入一个仅处理和transform的委托,并且标志随每条消息一起传输。TInputTOuput

\n