У меня есть несколько массивов типа char [] и string [], которые определяются как «static readonly». Их предметы никогда не меняются.Threadsafety and foreach со статическими массивами readonly
Перечисления 'foreach' и 'generics' являются потокобезопасными?
private static readonly string[] staticReadOnlyArray = new string[] { "someKey0", "someKey1", "someKey2", ... };
public bool SomeThreadSharedCall(string toCheck)
{
// #1
foreach (string s in staticReadOnlyArray)
{
if (s == toCheck)
return true;
}
return false;
// #2
return staticReadOnlyArray.Contains(toCheck);
// or #3
return staticReadOnlyArray.Any(s => string.Compare(toCheck, s, StringComparison.OrdinalIgnoreCase) == 0);
// or #4
staticReadOnlyArray.ForEach(s => someAction(s, toCheck));
}
Спасибо за ответ. Я ясно понимаю многопоточность API Win32 на C++. Но я смутился с C# 4. Массив IEnumerable. Для перемещения используется ссылка IEnumerator iterator = array.GetEnumerator(). Итак, итератор ссылается на новую копию IEnumerator , или каждый поток получает ссылку на одну копию объекта итератора? В последнем случае у нас есть проблема. –
Yargo
Все, что мне нужно - это постоянный предопределенный массив и поточно-безопасный метод для поиска. У меня есть дилемма - переписать код из 'foreach' в' for (int i = 0; i
Yargo