問題タブ [concurrentdictionary]

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.

0 投票する
1 に答える
422 参照

task - 最後の ContinueWith が終了した後に ConcurrentDictionary からアイテムを削除する方法

まず、「評判」が 1500 以上ある人は、「ContinueWith」のタグを作成してください (この質問にタグを付けてください)。ありがとう!

この投稿が長くなって申し訳ありませんが、関連する詳細を省略したために、誰かが私を助けようとしている時間を無駄にしたくありません. とは言っても、それはまだ起こるかもしれません。:)

それでは詳細です。いくつかの ActiveMQ キュー トピックにサブスクライブするサービスに取り組んでいます。このうち 2 つのトピックは多少関連しています。1 つは「会社の更新」で、もう 1 つは「製品の更新」です。両方の「ID」は CompanyID です。会社のトピックには、製品のトピックのデータが含まれています。他のサブスクライバーは商品データを必要としているが、商品トピックをサブスクライブしたくない/必要としないため、必須です。私のサービスはマルチスレッドであるため (私たちの裁量を超えた要件)、メッセージが到着すると、更新パラメーターが単にContinueWithである AddOrUpdate を使用してConcurrentDictionaryでそれぞれを処理するTaskを追加します。(下記参照)。これらのトピックとサブスクライバーが「永続的」であるために発生する可能性のある同時更新を防ぐために行われたため、リスナー サービスがオフラインになった場合 (何らかの理由で)、同じ CompanyID に対して複数のメッセージ (会社および/または製品) で終了する可能性があります。

さて、私の実際の質問(ついに!)タスク(1つのタスクだけか、ContinueWithタスクのチェーンの最後のタスクか)が終了した後、それをConcurrentDictionaryから削除したいと思います(明らかに)。どのように?同僚のアイデアをいくつか考えてもらいましたが、どれもあまり好きではありません。あなたの答えは私が持っているが好きではないアイデアの1つである可能性があるため、アイデアをリストするつもりはありませんが、最終的には最高のものになる可能性があります.

私の説明とは異なり、スクロールしすぎないようにコード スニペットを圧縮しようとしました。:)

nrtq = 質問とは関係ありません

ありがとう!

0 投票する
3 に答える
30984 参照

c# - ConcurrentDictionary.TryAddは失敗する可能性がありますか?

これはもっと学術的な質問です...しかし、ConcurrentDictionary.TryAddは失敗する可能性がありますか?もしそうなら、どのような場合に、そしてなぜですか?

0 投票する
1 に答える
1032 参照

visual-studio-2010 - ConcurrentDictionary->VS C++ の AddOrUpdate

私は Visual Studio 2010 C++ Express を使用しており、ConcurrentDictionary に項目を追加する必要があります。

私はそのようなコードを持っています:

AddOrUpdate メソッドは、通常の Dictionary 2 とは異なり、3 つの引数を取ります。

Microsoft のサイトでは、次のような引数を取ると述べています。

マイクロソフトのサイトでは、C# のコードも見つけました。

ただし、C++ では機能しません。3番目の引数として何を入れなければなりませんか?

0 投票する
2 に答える
3064 参照

c# - 更新中にソートおよび表示するときに、並行辞書で引数の例外が発生する

多数のスレッドが並行辞書を並行して更新し、メインスレッドが一定の時間間隔の後、すべての更新スレッドが完了するまで辞書の状態をソートされた順序で表示する次のプログラムで、再現が困難なエラーが発生しています。

関数には、文字ストリームと出力子のリストが与えられます。この関数は、各文字ストリームから読み取られた単語の単語頻度の同時辞書を(並列に)維持します。単語は新しいスレッドによって読み込まれ、メインスレッドは、すべての入力ストリームが読み込まれるまで、1ミリ秒ごとに辞書の現在の状態を(ソートされた順序で)出力します(実際には、出力は10秒ごとのようになります。ただし、エラーは非常に小さい値でのみ表示されるようです)。WriteBatch関数は、コンソールに書き込むだけです。

ほとんどの実行は問題ありませんが、WriteBatch関数のforeachステートメントで次のエラーが発生することがあります。

「未処理の例外:System.ArgumentException:インデックスが配列の長さ以上であるか、ディクショナリ内の要素の数が、インデックスから宛先配列の最後までの使用可能なスペースよりも大きいです。」

スレッドの更新を開始した後、表示ループを開始する前にメインスレッドが短時間スリープすると、エラーは解消されたように見えます。また、orderby句が削除され、辞書がlinqクエリで並べ替えられていない場合も、なくなるようです。説明はありますか?

foreach (var tuple in batch)WriteBatch関数のステートメントはエラーを出します。スタックトレースは次のとおりです。

未処理の例外:System.ArgumentException:インデックスが配列の長さ以上であるか、ディクショナリ内の要素の数が、インデックスから宛先配列の最後までの使用可能なスペースよりも大きいです。System.Linq.Buffer1..ctor(IEnumerable1 source)atSystem.Linq.OrderedEnumerable1のSystem.Collections.Concurrent.ConcurrentDictionary2.System.Collections.Generic.ICollection> .CopyTo(K eyValuePair2 [] array、Int32 index)で。 d__0.MoveNext()at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()at MyProject.ConsoleOutputter.WriteBatch(IEnumerable1 batch)in C:\ MyProject \ ConsoleOutputter.cs:line 10 at MyProject.Function(IEnumerable1 characterReaders、IOutputter outputter)

0 投票する
1 に答える
632 参照

c# - ConcurrentDictionary に追加されたアイテムはすぐにゾンビ状態になります

私は、例で ConcurrentDictionary コレクションを使用するAlchemy Websocketsを使用して、簡単な小さなプログラムをまとめようとしています。

私が書いたコードでは、新しいクライアントを ConcurrentDictionary に追加しようとしています。このクライアントにアクセスしようとすると、スクリプトが他の領域で失敗することに気付き、ConcurrentDictionary に追加するアイテムに絞り込んで、すぐに「ゾンビ」状態になります。

クライアントを追加するテストコードは次のとおりです。

デバッガーを使用してこの領域を中断すると、"test" に適切なクライアント情報が含まれていることがわかりますが、それを Clients コレクションに追加するとすぐに、"オブジェクトはゾンビ状態です。(HRESULT からの例外: 0x8013134F)" と表示されます。 .

辞書は私のクラスで次のように宣言されています。

私はおそらくばかげて明白なことをしていることを知っていますが、何が得られますか?

0 投票する
4 に答える
5933 参照

c# - AddOrUpdate 時に ConcurrentDictionary をロックしますか?

a を使用して、ConcurrentDictioanry<string, HashSet<string>>多くのスレッドにまたがるデータにアクセスします。

この記事(下にスクロール) で、メソッドAddOrUpdateがロックで実行されないため、スレッド セーフが危険にさらされる可能性があることを読みました。

私のコードは次のとおりです。

すべてがスレッドセーフであることを確認するために、AddOrUpdate呼び出しをステートメントで囲む必要がありますか?lock

0 投票する
1 に答える
787 参照

c# - 別の ConcurrentDictionary に存在する ConcurrentDictionary を更新するには?

Pr_Matrix で名前を付けた ConcurrentDictionary があります。

次のコードの目的は、data_set.Set_of_Point データ セット内のポイントの各ペア間の類似値をこのディクショナリに追加することです。

メインの ConcurrentDictionary に存在する ConcurrentDictionary を更新できません。

0 投票する
4 に答える
13388 参照

c# - ConcurrentDictionaryから値を取得する

私がこのConcurrentDictionaryを持っている場合:

Owner私がすでにの値を持っている場合、誰かが私がの値を取得する方法を知っていContextますか?基本的には、を使用して「検索」を実行したいと思いますContext。ありがとう。

0 投票する
2 に答える
6626 参照

c# - ConcurrentDictionary.GetOrAdd(key、valueFactory)でvalueFactoryを2回呼び出すことができるのはなぜですか?

スレッドセーフな静的キャッシュとして並行ディクショナリを使用していますが、次の動作に気づきました。

GetOrAddのMSDNドキュメントから:

異なるスレッドでGetOrAddを同時に呼び出す場合、addValueFactoryは複数回呼び出される可能性がありますが、そのキーと値のペアがすべての呼び出しでディクショナリに追加されるとは限りません。

工場が一度だけ呼び出されることを保証できるようにしたいと思います。独自の個別の同期に頼らずに(たとえば、valueFactory内でロックする)、ConcurrentDictionary APIを使用してこれを行う方法はありますか?

私のユースケースは、valueFactoryが動的モジュール内で型を生成しているため、同じキーの2つのvalueFactoriesが同時に実行される場合、次のようにヒットします。

System.ArgumentException: Duplicate type name within an assembly.

0 投票する
3 に答える
543 参照

c# - 拡張メソッドが「メソッドのオーバーロードなし」エラーを取得

最近、このプロジェクトをASP.Net 3.5から4.0にアップグレードして、スレッドセーフ機能のためにDictionaryの代わりにconcurrentDictionaryを使用できるようにしました。

これを使用するために、ヘルプフォーラムにあるコードを使用して拡張機能を作成しました。

それはすべて動作に非常に近く、正しく動作するように拡張機能を変更する方法がわかりません。

コードは次のとおりです。

そして拡張機能のコード:

そして、これは私が受け取るエラーです:

エラー1メソッド'ToConcurrentDictionary'のオーバーロードは2つの引数を取りません

この状況で拡張機能を機能させるには、何を変更する必要がありますか?どんな提案でも大歓迎です。