TPL 数据流 LinkTo 仅当没有其他匹配时

TPL Dataflow LinkTo only if no others match

我知道以下作品:

var forwarder = new BufferBlock<SomeType>();
forwarder.LinkTo(target1, item => matchesTarget1(item));
forwarder.LinkTo(target2, item => matchesTarget2(item));
forwarder.LinkTo(DataflowBlock.NullTarget<SomeType>());

问题是我将在运行时连续链接和取消链接项目。数据流会从最具体到最不具体之间进行选择,还是会按照尝试提供消息时链接的顺序进行选择?我想确保我的 NullTarget 只吞下消息,如果当时没有其他东西可以接受它,因为谓词链接和取消链接将连续发生。

只要您在链接 NullTarget 之后添加所有链接,它们将优先于 NullTarget 块,并且只有在不满足任何条件时才会丢弃该消息谓词的数量:

var forwarder = new BufferBlock<SomeType>();
forwarder.LinkTo(DataflowBlock.NullTarget<SomeType>()); // NullTarget is linked unconditionally

//... Some other stuff happens

// Dynamically linking new block so it takes precedence over the NullTarget
forwarder.LinkTo(target1, new DataFlowLinkOptions() { Append = false }, matchesTarget1);