イベントをキューに入れて並列に実行する必要があります。ThreadPoolがイベントを逃す
C#コードは、イベントをブロッキングコレクション内にキューイングし、ThreadPoolを使用してワーカースレッド上で各イベントを実行します。ただし、イベントが2000イベント/秒以上のレートでキューに入れられている場合は、一部のイベントが表示されません。 、さらに悪いことに
スレッドからスレッドに依存して着信要求:私はこの問題のために検索すると、私はThreadPoolのは、いくつかの要求を拒否またはどのスレッドが利用できない場合this linkから、それらを保持できることが判明しましたプールは保留状態にあってもよいし、スレッドプールは、着信要求
注処理するためにそれで使用可能なスレッドを持っていない可能性があるためも、主にを拒否される可能性があります。この問題は、コアi5でノートパソコンを使用している場合にのみ表示されますが、 Core i7で試したところ、正しく動作しました。
は、ここでのコードの抜粋です:
public static void ExecuteEvents()
{
foreach (EventData data in blockingCollection.GetConsumingEnumerable())
{
switch (data.EventType)
{
case EventType1:
ThreadPool.QueueUserWorkItem(o =>
{
Function1(data);
});
break;
case EventType2:
ThreadPool.QueueUserWorkItem(o =>
{
Function2(data);
});
default:
break;
}
}
}
「ThreadPool」によって拒否された作業項目について聞いたことがありません。それは別のものだと思う。 –
他の原因についてどう思いますか? @ JeroenvanLangen –
あなたの神秘的な消滅するものがeventtyp1または2ではないと判断した場合、いくつかのログを追加しようとしましたか? – BugFinder