我使用BroadcastBlock
其中TPL Dataflow
链接到ActionBlocks
. 但是,我在我的代码中找不到错误。我将项目发布到BroadcastBlock
via SendAsync
,当我在其中打印项目时,ActionBlocks
我发现有些项目丢失了,而神秘的是其他项目是重复的。我跟踪处理项目的顺序,因此发现只是在一个项目丢失之前或后续项目的情况下被复制(通过 馈送到相同的项目Actionblock
)LinkTo
。我不知道发生了什么。以下是我的一些相关代码片段:
这里的实例化BroadCastBlock
:
buffer = new BroadcastBlock<Quote>(quote => quote);
这是我链接到操作块的方式:
//Filter for incoming quotes
Predicate<Quote> quoteBroadCastFilter = new Predicate<Quote>(newQuote =>
{
if (symbol.symbolID == newQuote.symbol.symbolID)
{
return true;
}
else
{
return false;
}
});
//Link Strategy up to BroadCastBlocks
buffer.LinkTo<Quote>(newStrategy.GetStrategyQuoteBuffer(), new DataflowLinkOptions { PropagateCompletion = true }, quoteBroadCastFilter);
这就是我将项目(报价)提交给BroadCastBlock
:
buffer.SendAsync(quote);
问题是,当我在发送之前打印出跟踪信息时,SendAsync
一切看起来都很好。ActionBlock
当我在该链接中打印相同的信息时,BroadCastBlock
我观察到不常见的错误。我注意到当物品被BroadCastBlock
快速送入(通过EventHandler
API)时,会发生丢失/重复的物品
知道我做错了什么吗?