我正在创建一个封装 ConcurrentDictionary 的自定义集合。我发现了很多关于从通用集合封装/继承的信息,但没有特定于并发集合的信息。这是我的基本案例的代码片段,然后是一些一般性问题。
class ItemCollection
{
private ConcurrentDictionary<string, Item> Collection;
public ItemCollection() { Collection = new ConcurrentDictionary<string, Item>(); }
public bool TryAdd(string webId, string name) { return Collection.TryAdd(webId, new Item(name)); }
public bool TryAdd(string webId, Item item) { return Collection.TryAdd(webId, item); }
public bool TryUpdate(KeyValuePair<string, Item> entry, Data data)
{
Item newItem = entry.Value;
newItem.AddData(data);
return Collection.TryUpdate(entry.Key, newItem, entry.Value);
}
}
- 以这种方式封装并发集合是否可以接受,或者这是否正在进入从通用集合创建自己的线程安全集合的领域?
- 自定义集合是线程安全的吗?
- 继承并发集合是否可以接受?像这样,如果是这样
class ItemCollection : ConcurrentDictionary<string, Item>
,有什么准则,类似于从非并发集合继承的准则。 - 您如何为 Select 等方法实现转发方法?我尝试了以下一系列变体,但无法使其正常工作:
public IEnumerable<TResult> Select<ItemCollection, TResult>(this ItemCollection source, Func<KeyValuePair<string, Item>, TResult> selector) { return Collection.Select(selector); }
如果我继承 ConcurrentDictionary 它会导致类似的实现