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

本文关键字:状态 数据 数据流 任务 | 更新日期: 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));
}

这样,您输入一个仅处理TInputTOuputtransform委托,并且该标志随每个消息一起传输。