【发布时间】:2019-08-23 07:11:49
【问题描述】:
在.NET Framework 中,有Dictionary 和ConcurrentDictionary。
这些提供了Add、Remove等方法...
我知道当我们设计多线程程序时,为了线程安全,我们使用ConcurrentDictionary 代替Dictionary。
我想知道为什么ConcurrentDictionary 有AddOrUpdate、GetOrAdd 和类似的方法,而Dictionary 没有。
我们总是喜欢下面的代码来从Dictionary获取对象:
var dict = new Dictionary<string, object>();
object tmp;
if (dict.ContainsKey("key"))
{
tmp = dict["key"];
}
else
{
dict["key"] = new object();
tmp = new object();
}
但是当使用ConcurrentDictionary时,类似的代码只有一行。
var conDict = new ConcurrentDictionary<string, object>();
var tmp = conDict.GetOrAdd("key", new object());
我希望 .NET 有这些方法,但为什么没有呢?
【问题讨论】:
-
ConcurrentDictionary 拥有这些方法是因为它们可以防止竞争条件,而 Dictionary 不需要这些方法,因为它本质上是线程un安全的。
-
谢谢。好的,所以 .Net 确保为开发人员提供这些方法是安全的。
标签: c# .net dictionary concurrentdictionary