可以yield return
从多个线程调用静态类中的静态函数来安全地返回IEnumerable吗?
public static IEnumerableFooClassObjects() { foreach (FooClassWrapper obj in listOfFooClassWrappers) { yield return obj.fooClassInst; } }
调用它的每个线程是否总是会收到对集合中每个对象的引用?在我的情况下listOfFooClassWrappers
,在程序开始时写入一次,所以我不需要担心在调用此函数期间它会发生变化.我写了一个简单的程序来测试这个,我没有看到任何问题的迹象,但是线程问题可能很难被解决,并且这个问题可能在我做的运行期间根本没有显示出来.
编辑:C#线程安全的收益率回报?是类似的,但解决了迭代过程中修改集合的情况.由于隐藏的共享迭代器,因为类和方法都是静态的,所以我的关注更多地涉及多个线程,每个线程只获得集合的一部分.