2

我刚刚看到一个关于该类的 SO 问题System.Collections.ConcurrentBag<T>,并且我已经看到了ASP.NET MVC 中的ViewBag属性。Controller根据我的经验,我了解到,如果您了解人们编写代码的确切目的,那么使用他们的代码会更容易。我认为它对于 aList<T>或 aDictionary<TKey,TValue>或 aReadOnlyCollection<T>的含义非常直观。Bag另一方面, A不是那么直观。

所以,我的问题是:这个Bag隐喻意味着什么,特别是关于 .NET 框架?

4

3 回答 3

6

ConcurrentBag<T>是一个线程安全的、无序的项目序列,可以包含重复项。

所以与其他一些集合相比:

  • 它是无序的,像 aHashSet<T>但不像 aList<T>
  • 它可以包含重复项,像 aList<T>但不像 aHashSet<T>
  • 它只是值而不是地图(不像Dictionary<TKey, TValue>
  • 与所有非并发集合不同,它是线程安全的 - 因此您可以在多个线程之间共享一个实例,所有线程都可以读取和写入。

可能的用途包括您不关心排序的工作队列(否则您将使用ConcurrentQueue/ ConcurrentStack)或在将数据提取到另一个“本地”集合后始终应用排序顺序的项目列表。

于 2011-03-21T12:24:45.227 回答
0

ConcurrentBag is the same as ConcurrentStack and ConcurrentQueue except that it doesn't maintain ordering for performance reasons, this article explain it in more details http://www.emadomara.com/2011/08/what-is-concurrentbag.html

于 2011-08-12T04:36:12.097 回答
0

从 MSDN 文档的第一行:

表示一个线程安全的、无序的对象集合。

我认为这并不比“List”或“ReadOnlyCollection”更直观——YMMV。

于 2011-03-21T12:27:13.487 回答