C#では、BlockingCollectionがバックグラウンドスレッドによってクリアされるまで待つことが可能かどうか、時間がかかり過ぎるとタイムアウトが発生するのではないかと思います。BlockingCollectionキューがバックグラウンドスレッドによってクリアされるまで待ちますが、時間がかかりすぎるとタイムアウトが発生しますか?
現時点で私が持っている一時的なコードはやや洗練として私を打つ(それはThread.Sleep
を使用することをお勧めしたとき以来?):
while (_blockingCollection.Count > 0 || !_blockingCollection.IsAddingCompleted)
{
Thread.Sleep(TimeSpan.FromMilliseconds(20));
// [extra code to break if it takes too long]
}
私はあなただけ()BlockingCollection.CompleteAddingを呼び出した後にこれをやっていると仮定 - 正しいですか?とにかく、実際にあなたが持っているものよりも良い方法はありません。 –
@Matthew Watson。いい視点ね;キューに追加されていないキューアイテムがないことを確認するために追加の用語を追加しました。また、バックグラウンドスレッドがキューをクリアしているということを述べるための質問を明確にしました。 – Contango
「待つ」とはどういう意味ですか? TryTakeを使用している場合は、実際にタイムアウトを指定することができます。列挙子を使用している場合はさらに制限されますが、原則としてTryTakeを使用する列挙子ラッパーを作成できます。 – Holstebroe