Может ли статическая функция в статическом классе, которая использует yield return
для возврата IEnumerable, быть безопасно вызвана из нескольких потоков?
public static IEnumerable<FooClass> FooClassObjects()
{
foreach (FooClassWrapper obj in listOfFooClassWrappers)
{
yield return obj.fooClassInst;
}
}
Будет ли каждый поток, который вызывает это, всегда получать ссылку на каждый объект в коллекции? В моей ситуации listOfFooClassWrappers
записывается один раз в начале программы, поэтому мне не нужно беспокоиться об этом, изменяя его во время вызова этой функции. Я написал простую программу, чтобы проверить это, и я не видел никаких признаков проблем, но проблемы с потоками могут быть сложными, и возможно, что проблема просто не отображалась во время прогонов, которые я сделал.
EDIT: Является ли доходность возврата в С# потокобезопасной? аналогичной, но решает ситуацию, когда коллекция изменяется при повторении. Моя забота больше связана с несколькими потоками, каждый из которых получает только часть коллекции из-за скрытого общего итератора, учитывая, что класс и метод являются статическими.