【发布时间】:2013-04-12 09:38:39
【问题描述】:
我想知道是否可以改变数据块的完成状态?
例如,我用block.Complete() 标记了一个完整的var block = new BufferBlock<int>(); 数据块。该块链接到其他数据块。我想知道是否可以通过将 block 的完成状态更改回其原始 !complete 状态来再次运行。
如果这是不可能的,我如何执行多次运行,包括完成,而不必 a) 取消链接所有块,b) 重新实例化所有块,以及 c) 再次重新链接所有块?
有什么想法可以简化运行数据流周期的任务,包括完成链下的每个块,而无需重新创建整个框架?
谢谢
【问题讨论】:
-
为什么还需要单独运行?另外,您为什么不想重新创建数据流网络?我怀疑它会影响性能(除非您每秒执行多次)并且它也不应该使您的代码变得更加复杂。
-
单独运行是要求的一部分。重新创建整个网络将完全破坏通过选择 tpl 数据流获得的效率。主要令人头疼的是取消链接和重新链接,而不是重新创建每个数据流块。如果改变完成状态是不可能的,我怎么能在不影响每个数据流块的完成状态的情况下发出完成信号?我不能只发送一个原子标志,因为链中的对象类型并不相同(涉及到变换块)。
标签: c# task-parallel-library tpl-dataflow