使用 ConcurrentDictionary 更新字典代码

本文关键字:代码 字典 更新 ConcurrentDictionary 使用 | 更新日期: 2023-09-27 18:35:17

如何更新以下代码以使用ConcurrentDictionary?

private Dictionary (string, SymbolOrderBook) books = new Dictionary(string, SymbolOrderBook)();
SymbolOrderBook book;
lock (books)
{
    if (!books.TryGetValue(symbol, out book))
    {
        book = new SymbolOrderBook(symbol);
        books.Add(symbol, book);
    }
}

使用 ConcurrentDictionary 更新字典代码

你可以像这样使用 GetOrAdd 方法:

首先,你像这样定义字典:

private ConcurrentDictionary<string, SymbolOrderBook> books =
    new ConcurrentDictionary<string, SymbolOrderBook>();

然后你得到或添加一个这样的条目:

SymbolOrderBook book = books.GetOrAdd(symbol, s => new SymbolOrderBook(s));

这样做的作用是,如果指定符号存在现有书籍,则返回该书籍,否则,它会创建一个新书籍,将其添加到字典中,然后返回它。所有这些都发生在原子操作中。

using System.Collections.Concurrent;
ConcurrentDictionary<string, SymbolOrderBook> books = new ConcurrentDictionary<string, SymbolOrderBook>();
SymbolOrderBook book = new SymbolOrderBook(symbol);
books.GetOrAdd(symbol, book);