質問

私はちょうどそのような質問を見ました System.Collections.ConcurrentBag<T> クラス、そして私は見ました ViewBag のプロパティ Controller ASP.NET MVCで。私の経験では、彼らがそれを書くことで何を得ているかを正確に理解していれば、人々のコードを使いやすいことを学びました。私は何についてかなり直感的だと思います List<T> またはa Dictionary<TKey,TValue> またはa ReadOnlyCollection<T> 表現することを意図しています。 a Bag 一方、それほど直感的ではありません。

だから、私の質問は次のとおりです。 これは何ですか Bag 特に.NETフレームワークに関しては、表現することを意図していますか?

役に立ちましたか?

解決

ConcurrentBag<T> 重複を含むアイテムのスレッドセーフ、順序付けられていないシーケンスです。

したがって、他のいくつかのコレクションと比較して:

  • それは並べ替えられていません HashSet<T> しかし、aとは異なります List<T>
  • aのように複製を含めることができます List<T> しかし、aとは異なります HashSet<T>
  • マップではなく値だけです(とは異なります Dictionary<TKey, TValue>)
  • すべての非伝統コレクションとは異なり、それはスレッドセーフです。したがって、複数のスレッド間、すべての読み取りと書き込みの間でインスタンスを共有できます。

可能な用途には、注文を気にしない作業キューが含まれます(そうでなければ使用する場合 ConcurrentQueue / ConcurrentStack)または、データを別の「ローカル」コレクションに取得した後、常にソートオーダーを適用するアイテムのリスト。

他のヒント

MSDNドキュメントの最初の行から:

オブジェクトのスレッドセーフ、順序付けられていないコレクションを表します。

「リスト」や「ReadOnlyCollection」よりも直感的ではないと思います。

concurrentBagは、パフォーマンス上の理由で注文を維持していないことを除いて、concurrentStackおよびconcurrentqueueと同じです。この記事では詳細について説明します。 http://www.emadomara.com/2011/08/what-is-concurrentbag.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top