にリンクするを使用しBroadcastBlock
ます。ただし、コードにバグが見つかりません。アイテムをビアに投稿し、アイテムを印刷すると、一部が欠落しており、不思議なことに重複していることがわかります。処理されたアイテムの順序を追跡しているため、アイテムが欠落しているときに、前のアイテムまたは後続のアイテムが重複していることがわかりました(経由で同じアイテムに供給されます)。何が起こっているのかわかりません。関連する私のコードスニペットのいくつかを次に示します。TPL Dataflow
ActionBlocks
BroadcastBlock
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
まれにエラーが発生します。アイテムが ( APIBroadCastBlock
を介して) 非常に迅速にフィードされると、アイテムの欠落/重複が発生することに気付きました。EventHandler
私が間違っていることは何ですか?