問題タブ [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# - BlockingCollection に要素を挿入する
空ではない BlockingCollection の最初の位置 (または番号付きの位置) に要素を挿入することは可能ですか? リストの「挿入」メソッドと同様です。
何かのようなもの:
c# - この BlockingCollection は予想どおり FIFO ではありません
私の質問を見てくれてありがとう: 私BlockingCollection
は常に FIFO (先入れ先出し) であると想定していた (GUI 以外のスレッド) を持っていますが、そうではないことに気付きました。
コードの例をdotnetfiddleに貼り付けましたが、マルチスレッドを実行しないため、エラーが発生していることはわかりませんが、コードを見ることができます
わかった。それで、私は何が欲しかったのですか?2 番目のスレッド (非 GUI) を作成したかったのVisual Studio Express 2013 C# Winforms
ですが、それは、送信された順序で渡されたものを実行する作業場のようなものでした。
次のような構造を選択しました。
この奇妙な配置の理由は、最大 20 個または 30 個types
のキュー オブジェクト (私はこれらをすべて と呼びますQDoType_something
) が必要であり、レイアウトには満足していますが、呼び出すとエンジンが動作しませんでした。
私は得る
また
したがって、明らかに " FIFO
" ではなく、これは憂慮すべきことです.. 私BlockingCollection
が a)not gui
スレッド b) 1 つの余分なスレッドとしてのみ実行されていること、および c) この 2 番目のスレッドが常に実行されていることFIFO
(先入れ先出し) を確実にする方法はありますか? ?)
要求されたとおり: 適切なコードは次のとおりです。
=QDoType_test.cs=
=nofQDo.cs=
=QDoType.cs=
=QDo.cs=
python - Web アプリで Pika BlockingConnection を使用しても問題ありませんか?
BlockingConnection
とについて少し混乱していAsyncoreConnection
ます。Django アプリから RabbitMQ キューにメッセージを送信したいと考えています。グローバルBlockingConnection
オブジェクトを使用してそれを行うことは問題ありませんか?
ありがとうございました。
c# - 2 回目以降はコレクションにアイテムを追加できません
基本的に、Windowsサービスアプリケーションにブロッキングコレクションがあり、コレクションに4つのアイテムを追加して処理するたびに処理します。
1回目は大丈夫ですが、2回目は失敗。エラーは
BlockingCollection は、追加に関して完了としてマークされています。
私のコード:
主なアプリケーション コード:
bc.CompleteAdding();
それ以上の追加をブロックするコードがあることに気付きました。ということでコメントアウトしたのですが、2ラウンド目のブロックにはいきませんでした。コードに至りませんでした。私の古いスレッドConsole.WriteLine("Blocking end");
と同じでした。
c# - 複数の BlockingCollection を 1 つのバッキング ストアにラップできますか?
たとえば、単一のバッキング ストアで複数の BlockingCollections をインスタンス化できるかどうかを知りたいです。
この調査の動機は次のとおりです。BlockingCollection
Dispose メソッドの呼び出しが必要です。これは、using
ブロックを使用するとシームレスです。ただし、using
ブロックは常に適切であるとは限らないため (プロデューサーとコンシューマーが異なるメソッドだけでなく異なるスレッドにも住んでいると考えてください)、Dispose を呼び出すために必要な簿記を行うことは、それほど簡単ではなくなり、エラーが発生しやすくなります。 . ただし、 を伝播するBlockingCollection
代わりにバッキング ストアを伝播できれば、ブロックBlockingCollection
内でローカルをローカルにインスタンス化できます。using
私の推測では、IProducerConsumerCollection インターフェイスには何もないため、BlockingCollection が依存する唯一のものであり、そうでないことを暗示しているようです。
c# - BlockingCollection によって生成される無限のタスクでの Task.WhenAll の使用
バックグラウンド タスクをブロッキング コレクション (バックグラウンドで追加) に追加しています。
GetConsumingEnumerable によって返された Enumerable で Task.WhenAll を使用して待機しています。
私の質問は: IEnumerable を受け取る Task.WhenAll のオーバーロードは、潜在的に無限の量のタスクを受け取るために「準備」されていますか?
このようにできるのか、それともこのように使用することを意図していたのか、よくわかりません。
c# - 終わりのないタスクにタスクとブロッキング コレクションを使用する
ネットワークからデータを読み取り、それを関数に送信して内容を解析しようとしています。メッセージ (xml) のサイズが異なる可能性があるため、メッセージ全体、複数のメッセージ、またはメッセージの一部を読み取ることができました。
BlockingCollection
ネットワークからデータを読み取るときに呼び出す場所を使用してコードを実装しTryAdd
、コンシューマ スレッドを使用してデータを取り出してBlockingCollection
解析しようとしています。例は非常に簡単に見えますが、一度しか機能しないようで、その後終了します。メッセージが入ってくると、消費者が継続的に解析するようにします。私が現在行っていることについては、以下のコードを参照してください。
メッセージの処理:
ワイヤーを読み取る(これはスレッドで実行されます):
ここで私が間違っていることを誰かに教えてもらえますか?
c# - 一度に n 個のアイテムの収集プロセスをブロックする - 1 個が完了するとすぐに続行する
次のシナリオがあります。
データベースから 50 個のジョブをブロッキング コレクションに取り込みます。
各ジョブは長時間実行されます。(潜在的に可能性があります)。だから私はそれらを別のスレッドで実行したい。(私は知っています-それらを Task.WhenAll として実行し、TPL にそれを理解させる方が良いかもしれません-しかし、同時に実行する数を制御したい)
5つ同時に実行したいとします(構成可能)
各ジョブに 1 つずつ、合計 5 つのタスク (TPL) を作成し、それらを並行して実行します。
私がやりたいことは、ステップ 4 のジョブの 1 つが完了するとすぐにブロッキング コレクション内の次のジョブを取得し、50 個すべてが完了するまで続行することです。
ジョブが完了すると呼び出される静的なblockingCollectionとTaskCompletionSourceを作成し、コンシューマを再度呼び出してキューから一度に1つのジョブを選択することを考えています。また、各ジョブで async/await を呼び出したいと思いますが、これに加えて、アプローチに影響があるかどうかはわかりません。
これは私がやろうとしていることを達成する正しい方法ですか?
このリンクに似ていますが、キャッチは、最初の N 項目の 1 つが完了したらすぐに次のジョブを処理したいということです。すべての N が完了した後ではありません。
アップデート :
わかりました、誰かが後でそれを使用したい場合は、このコードスニペットがまさに私が望むことをしています。以下に示すように、5 つのスレッドが作成され、現在のジョブが完了すると、各スレッドは次のジョブを開始します。常に 5 つのスレッドのみがアクティブです。これが常にこのように 100% 機能するとは限らず、1 つの CPU/コアで使用するとコンテキスト切り替えのパフォーマンスの問題が発生することを理解しています。
ジョブ 2 はスレッド :13 で開始されました。待ち時間:3600000ms。時間:2014/08/29 15:14:43
ジョブ 4 はスレッド :14 で開始されました。待ち時間:15000ms。時間:2014/08/29 15:14:43
ジョブ 0 がスレッド :7 で開始されました。待ち時間:600000ms。時間:2014/08/29 15:14:43
ジョブ 1 はスレッド :12 で開始されました。待ち時間:900000ms。時間:2014/08/29 15:14:43
ジョブ 3 はスレッド :11 で開始されました。待ち時間:120000ms。時間:2014/08/29 15:14:43
ジョブ 4 はスレッド :14 で終了しました。2014/8/29 15:14:58
ジョブ 5 はスレッド :14 で開始されました。待ち時間:1800000ms。時間:2014/08/29 15:14:58
ジョブ 3 はスレッド :11 で終了しました。2014/8/29 15:16:43
ジョブ 6 がスレッド :11 で開始されました。待ち時間:1200000ms。時間:2014/08/29 15:16:43
ジョブ 0 はスレッド :7 で終了しました。2014/8/29 15:24:43
ジョブ 7 がスレッド :7 で開始されました。待ち時間:30000ms。時間:2014/08/29 15:24:43
ジョブ 7 はスレッド :7 で終了しました。2014/8/29 15:25:13
ジョブ 8 がスレッド :7 で開始されました。待ち時間:100000ms。時間:2014/08/29 15:25:13
ジョブ 8 はスレッド :7 で終了しました。2014/8/29 15:26:53
ジョブ 9 がスレッド :7 で開始されました。待ち時間:900000ms。時間:2014/08/29 15:26:53
ジョブ 1 はスレッド :12 で終了しました。2014/8/29 15:29:43
ジョブ 10 がスレッド :12 で開始されました。待ち時間:300000ms。時間:2014/08/29 15:29:43
ジョブ 10 はスレッド :12 で終了しました。2014/8/29 15:34:43
ジョブ 11 がスレッド :12 で開始されました。待ち時間:600000ms。時間:2014/08/29 15:34:43
ジョブ 6 はスレッド :11 で終了しました。2014/8/29 15:36:43
ジョブ 12 がスレッド :11 で開始されました。待ち時間:300000ms。時間:2014/08/29 15:36:43
ジョブ 12 はスレッド :11 で終了しました。2014/8/29 15:41:43
ジョブ 13 がスレッド :11 で開始されました。待ち時間:100000ms。時間:2014/08/29 15:41:43
ジョブ 9 はスレッド :7 で終了しました。2014/8/29 15:41:53
ジョブ 14 がスレッド :7 で開始されました。待ち時間:300000ms。時間:2014/08/29 15:41:53
ジョブ 13 はスレッド :11 で終了しました。2014/8/29 15:43:23
ジョブ 11 はスレッド :12 で終了しました。2014/8/29 15:44:43
ジョブ 5 はスレッド :14 で終了しました。2014/8/29 15:44:58
ジョブ 14 はスレッド :7 で終了しました。2014/8/29 15:46:53
ジョブ 2 はスレッド :13 で終了しました。2014/8/29 16:14:43