6

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

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

如果这是不可能的,我如何执行多次运行,包括完成,而不必 a) 取消链接所有块,b) 重新实例化所有块,以及 c) 再次重新链接所有块?

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

谢谢

4

1 回答 1

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仅处理TInputand的委托,TOuput并且该标志与每条消息一起传输。

于 2013-04-13T23:04:50.703 回答