Mat*_*olf 5 c# task-parallel-library tpl-dataflow
我想知道是否可以更改数据块的完成状态?
例如,我标记了一个var block = new BufferBlock<int>();完整的数据块block.Complete().该块链接到其他数据块.我想知道我是否可以block通过将其完成状态更改回原来的完整状态来再次运行.
如果不可能,我怎么能执行多次运行,包括完成,而不必a)解除所有块的链接,b)重新实例化所有块,c)再次重新链接所有块?
任何可以简化运行数据流周期任务的想法,包括完成链中的每个块而不必重新创建整个框架?
谢谢
不,您不能 \xe2\x80\x9cuncomplete\xe2\x80\x9d 一个已完成的数据流块。我认为您应该做的是向每条消息添加一个标志,表明它是否是运行中的最后一条消息。为了使使用它更简单,您可以创建一组辅助方法,例如:
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n\n这样,您输入一个仅处理和transform的委托,并且标志随每条消息一起传输。TInputTOuput