看起来既AddOrUpdate
和TryUpdate
会工作。
编辑
我可能也错了。如果是这样,我认为文档没有足够清晰的说,所以我们来看看代码。反射器的礼貌:
public TValue AddOrUpdate(TKey key, Func<TKey, TValue> addValueFactory, Func<TKey, TValue, TValue> updateValueFactory)
{
TValue local;
TValue local3;
if (key == null)
{
throw new ArgumentNullException("key");
}
if (addValueFactory == null)
{
throw new ArgumentNullException("addValueFactory");
}
if (updateValueFactory == null)
{
throw new ArgumentNullException("updateValueFactory");
}
do
{
if (!this.TryGetValue(key, out local3))
{
TValue local2;
local = addValueFactory(key);
if (!this.TryAddInternal(key, local, false, true, out local2))
{
continue;
}
return local2;
}
local = updateValueFactory(key, local3);
}
while (!this.TryUpdate(key, local, local3));
return local;
}
现在,如果更新了工厂现有列表,并返回一个额外成员一个新的,它确实看我,好像这将是原子。如果出现竞争状况,失败者将再次更新工厂。我错了吗?
你已经在标签中有C#了。你也不需要把它放在标题中。此外,你的问题与C#4.0无关。 – 2010-07-22 18:57:05