問題タブ [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 投票する
0 に答える
265 参照

c# - ConcurrentDictionary を更新する最も簡単な方法は何ですか?

ConcurrentDictionary を作成しましたが、その要素を更新する方法がわかりません。

ここで (注文に新しい要素を追加して) 更新する必要があります。TryUpdate を使用する必要があるようですが、非常に面倒で読みにくいようです。

誰か良い方法を教えてください。

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

c# - ディクショナリのレコードをロック - ConcurrentDictionary

静的ディクショナリを使用したマルチスレッド アプリケーション。これはリクエストの処理に使用され、各リクエストは 1 つのレコードのみにアクセスします。

リクエストの処理

  1. レコードを読む
  2. 値を計算するアルゴリズム
  3. 記録を更新します。

プロセス中に、特定のレコードをブロックする必要があります。

手がかりが見つかりません。誰か助けてください。

ConcurrentDictionary を使用できますか??

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

c# - valueFactory に副作用がある場合の ConcurrentDictionary.GetOrAdd

データベース内のテーブルに値を挿入して ID を取得するいくつかの非常に中心的な関数にキャッシュ レイヤーを導入することで、データベース サーバーから作業をオフロードしようとしています。これはマルチスレッド環境にあります。

私の最初のアプローチは次のとおりです。

これは役に立ちました。ただし、スレッドはまだお互いに多くのことを待ちます。この待ち時間を減らしたい。私の最初の考えは、を使用することConcurrentDictionary.GetOrAdd(key, valueFactory)でした。valueFactory が複数回呼び出される可能性があるため、これは機能しません。

私はこのアプローチに行き着きました:

これを行うより良い方法はありますか?これもスレッドセーフですか?

0 投票する
0 に答える
383 参照

c# - ConcurrentDictionary からの値の削除>

私は (できれば) スレッドセーフなデータ構造を書いています。これは本質的に HashSets の ConcurrentDictionary のラッパーです。

私がやりたいことは、次のようないくつかの方法を持つことです:

ConcurrentDictionary.AddOrUpdate(key, newValue, Func) に似たものが TryRemove に存在することを望んでいましたが、うまくいきませんでした。これらの Remove メソッドは両方とも、通常のディクショナリに対して非常に簡単に記述できますが、それらを同時に実行するとなると、途方に暮れます。誰かが私を正しい方向に向けますか?:)

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

c# - ConcurrentDictionary ContainsKey メソッドは同期されていますか?

簡単な質問私が持っていると仮定しますConcurrentDictionary

私が使用TryAddするContainsKey方法

ここで、100 スレッドから処理を開始したとします。メソッドで新しいキーを追加しているときに3つのスレッドが別の3つのスレッドでメソッドTryAddでキーが存在するかどうかを尋ねると仮定しますContainsKey

ContainsKey結果を返す前に、これらの 3 つのスレッドがプロセスを追加するのを待ちますか?

または、それらは同期されていません。つまり、これらの 3 つのスレッドのいずれかが、ContainsKey メソッドで要求しているキーを追加している可能性がありますが、プロセスがまだ完了していないため、取得しようとしていた答えは false になります。

答えは非常にTy C#WPF .net 4.5最新

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

c# - ContinueWith デリゲートは Task の完了前に実行されます

背景情報: 一度に 5 つの同時操作を処理できるシングルトン クラスを作成しようとしています。各操作は で表されSomeAsyncMethodます。


このメソッドは、シングルトン クラス内に存在します。

consumersですConcurrentDictionary<int,Task>

私の問題: 何らかの理由で、ContinueWithデリゲートは の完了前に実行されSomeAsyncMethodます。これが起こっていることを知っている理由は、監視する別のメソッドがあるためですinstance.Consumers.Count-カウントは実行0SomeAsyncMethodです。

何故ですか?

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

c# - 3 つのスレッドで使用される C# ConcurrentDictionary

を使用するクラスがありますConcurrentDictionary

このクラスには、 this に対していくつかの操作を実行する 3 つの関数がありますConcurrentDictionnary

各関数は、異なるスレッドによって呼び出されます。

  • 最初の関数操作: dictionnary.Where、dictionnary.TryRemove
  • 2 番目の関数操作: dictionnary.Where
  • 3 番目の関数操作: dictionnary.TryAdd

この最後の関数は、さまざまな時点でブロックされます。ブロックせずに要素を辞書に追加する必要がありますが、どうすればよいですか?

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

c# - スレッドセーフな ConcurrentDictionary コレクションの使用

私はスレッドセーフでないコレクション List を使用する関数を持っています。スレッドセーフにするために、lock-operator を使用します。

ロックフリーに変換したい。それを行うために、List コレクションの代わりにこの関数 ConcurrentDictionary コレクションで使用したので、関数は次のように見え始めます。

しかし、この関数では、エラーが発生し始めます(インデックスが範囲外です)。スレッドセーフコレクション(ConcurrentDictionary)を正しく使用するには? エラーを修正するにはどうすればよいですか?