Используйте ConcurrentDictionary
, который является потокобезопасным набором пар ключ / значение, который позволяет одновременно получать доступ к нескольким потокам.Вы можете прочитать по адресу ConcurrentDictionary .
ConcurrentDictionary<TKey, TValue>
реализует интерфейсы IReadOnlyCollection<T>
и IReadOnlyDictionary<TKey, TValue>
, начиная с .NET Framework 4.6;в предыдущих версиях .NET Framework класс ConcurrentDictionary не реализовывал эти интерфейсы.
Все операции этого класса являются атомарными и потокобезопасными. Единственными исключениями являются методы, которые принимают делегат, то есть, AddOrUpdate и GetOrAdd.
Для модификаций и операций записи в словарь, ConcurrentDictionary<TKey, TValue>
использует мелкозернистую блокировку для обеспечения безопасности потока.
Операции чтения в словаре выполняются без блокировок .
Однако делегаты для этих методов вызываются вне блокировок, чтобы избежать проблем, которые могут возникнутьот выполнения неизвестного кода под замком.Поэтому код, выполняемый этими делегатами, не подчиняется атомарности операции.