問題タブ [blockingcollection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - GetConsumingEnumerable は実際に BlockingCollection からアイテムを削除しますか?
http://msdn.microsoft.com/en-us/library/dd267312.aspxでの MSDN の発言は、次のように述べています...
「BlockingCollection のデフォルトのコレクション タイプは ConcurrentQueue です」
これは、コレクションで「GetConsumingEnumerable()」を実行している間、プルされたアイテムがキューから取り出され、使用後に GC のマークが付けられることを意味しますか?
つまり...次のスニペットでは、
ループの繰り返しの後、アイテムはどうなりますか?
c# - 実行時にアイテムの最大数を再設定する機能を備えた BlockingCollection
BlockingCollection
コレクションがバッファとして機能する従来のパブリッシュ/サブスクライブ タイプの例で使用している があります。N に達すると、リーダーが少なくとも 1 つのアイテムを消費するまで待機する必要があります。これはうまくいきます。
ここで、実行時にコレクションが保持できるアイテムの最大数をリセットできるようにしたいと考えています。ロックとモニターを使用してこれを達成し、blockingcollection をまとめて破棄する方法は知っていますが、コア フレームワークに既に存在するものを再実装したくありません。
それを達成する方法はありますか?
c# - Blockingcollection を監視可能にする
ビューモデルのブロッキングコレクションにバインドされたリストがあります
とプロパティ
ブロッキングコレクションを監視可能にする最も簡単な方法は何ですか?そこに良い例が見つからないようです
c# - BlockingCollection からの要素の削除と Observable Collection の設定
ブロッキング コレクション (プロデューサー コンシューマー キューである大きな画像) からカスタム オブジェクト (株式) を挿入および削除するユース ケースがあります。
問題のステートメントは、このスレッドとまったく同じです - ObservableCollection を BlockingCollection で更新します
私はリアクティブ拡張機能を使用したくありませんが、このロジックを実行する従来の C# の方法が必要です (これは残念ながら難しい要件であり、その意味を完全に理解しています)。コードのスニペットはこちら
MainWindowViewModel.cs
.net - コレクション操作と構造体のブロック
タイプ T のクラスで BlockingCollection を使用していますが、T を構造体に変換する必要があるかどうか疑問に思っています。
原則として BlockingCollection 署名から、私はそれに関する問題を見ていません:
ただし、キャンセルをサポートするブロッキング操作テイクのセマンティックは、要素が使用可能になる前に操作がキャンセルされた場合に null を返すことです。ここでの問題は、構造体を null にすることはできないため、次のコードは無効です。
したがって、ブロッキング コレクションはクラスに限定されているのでしょうか、それともセマンティックの変更によって初期化されていない構造体が返されるのでしょうか?
c# - BlockingCollection.GetConsumingEnumerable() のキャンセルと残りの処理
作業を生成する 1 つのプロセスと、BlockingCollection<>
その作業を消費する 2 番目のプロセスがあります。プログラムを閉じるときは、コンシューマーが作業を消費するのを止める必要がありますが、保留中だったが消費されていない作業をすばやくログに記録する必要があります。
foreach (<object> in BlockingCollection.GetConsumingEnumerable())
現在、私の消費者はループを持つスレッドを生成しています。プログラムを停止すると、プロデューサーが を呼び出しますConsumer.BlockingCollection.CompleteAdding()
。私が見つけたのは、私の消費者がキュー内のすべてを処理し続けていることです。
問題をグーグルで検索すると、CancellationToken
. だから私はそれを試しました:
私のプロデューサーは:
これを試してみると、OperationCancelledException が発生したという兆候はありません。
この質問は、キャンセル トークンの使用を説明しようとしていますが、正しく使用されていないようです。(引数:機能する場合、それは「十分に正しい」です。)そして、この質問は私の質問とまったく同じように見えますが、例はありません。(ここも同じ)
繰り返しになりますが、別の方法を使用してキャンセルされた後、キュー内の残りのアイテムを処理する必要があるという警告とともに、CancellationToken
onを適切に使用するにはどうすればよいですか?BlockingCollection.GetConsumingEnumerable()
(私の問題は、CancellationToken の適切な使用に集中していると思います。私のテストでは、プロセスが実際にキャンセルされていることは示されていません。(StopFlag.IsCancellationRequested
常に等しいfalse
))
.net - ConcurrentDictionary のリストの順序は保証されていますか?
ログ行を保存するために ConcurrentDictionary を使用しています。それらをユーザーに表示する必要がある場合はToList()
、リストを生成するために呼び出します。しかし奇妙なことに、一部のユーザーは最新の行をリストの最初に受け取りますが、論理的には最後にあるはずです。
これは、ConcurrentDictionary が IEnumerate インターフェイスでの永続的な順序を保証していないためですか、それともその理由は何ですか?