并发字典可以转换为不可变字典,如下所示:
private readonly ConcurrentDictionary<string,JObject> x = new ConcurrentDictionary<string, JObject>();
public ImmutableDictionary<string, JObject> X => x.ToImmutableDictionary();
我试图将并发队列转换为不可变队列,如下所示:
private readonly ConcurrentQueue<JObject> x = new ConcurrentQueue<JObject>();
public ImmutableQueue<JObject> X => x.ToImmutableQueue();
但是,方法ToImmutableQueue
不存在。
我查看了API,但我没有看到此方法的等效内容。
那么,将并发队列转换为不可变队列的方法是什么?
答案 0 :(得分:2)
您应该可以使用工厂方法https://msdn.microsoft.com/en-us/library/dn440262(v=vs.111).aspx
private readonly ConcurrentQueue<JObject> x = new ConcurrentQueue<JObject>();
public ImmutableQueue<JObject> X => ImmutableQueue.CreateRange<JObject>(x);
我怀疑它不包含在扩展中,因为即使使用不可变实现,FIFO队列和LIFO堆栈本质上也被认为是可变数据结构;然而,字典或集合本身被认为具有只读版本。
由于ConcurrentQueue和ImmutableQueue之间的转换实际上是实现的变化而不是接口,所以我认为你失去了ConcurrentQueue的线程安全性,所以我不建议这样做除非这是你的目标。