任务数据流,可以从完成状态更改数据块
本文关键字:状态 数据 数据流 任务 | 更新日期: 2023-09-27 18:08:42
我想知道是否可以改变数据块的完成状态?
例如,我用block.Complete()
标记了一个var block = new BufferBlock<int>();
数据块。该块链接到其他数据块。我想知道我是否可以通过将block
的完成状态更改回原来的完成状态来重新运行它。
如果这是不可能的,我怎么能执行多次运行,包括完成,而不必a)解除链接所有块,b)重新实例化所有块,和c)重新链接所有块?
有没有什么想法可以简化运行数据流循环的任务,包括完成链上的每个块,而不必重新创建整个框架?
谢谢
不行,你不能" uncomplete "一个已完成的数据流块。我认为你应该做的是为每条消息添加一个标志,表明它是否是运行中的最后一条消息。为了使使用它更简单,您可以创建一组助手方法,如:
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));
}
这样,您输入一个仅处理TInput
和TOuput
的transform
委托,并且该标志随每个消息一起传输。