Поток безопасно иметь статическое поле IReadOnlyDictionary? - PullRequest
0 голосов
/ 24 апреля 2018

Безопасно ли писать следующий код?

private static readonly IReadOnlyDictionary<string, string> Map = new Dictionary<string, string>
{
    ["A"] = "AAA",
    ["B"] = "BBB",
    ["C"] = "CCC"
};

Я знаю, ConcurrencyDictionary - это стандартный способ обеспечения безопасности потоков для словарей.Но так как все, что мне нужно, это «постоянная» карта, которую я никогда не собираюсь изменять, безопасно ли на 100% инициализировать статическое поле IReadOnlyDictionary только для чтения?

1 Ответ

0 голосов
/ 24 апреля 2018

Для обеспечения безопасности потока важен фактический тип объекта (Словарь), а не тип переменной (IReadOnlyDictionary).

Согласно документации :

A Dictionary<TKey, TValue> может поддерживать несколько считывателей одновременно, если коллекция не изменена.

Следовательно, ваш код в порядке & mdash; конечно, при условии, что никто не возвращает вашу переменную обратно в словарь и не изменяет ее. Если вас беспокоит такая возможность, поместите словарь в ReadOnlyDictionary .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...