List <T>是否可以读取线程安全?

use*_*648 33 c# parallel-processing list

以下伪代码是否是线程安全的?

IList<T> dataList = SomeNhibernateRepository.GetData();

Parallel.For(..i..)
{
    foreach(var item in dataList)
    {
       DoSomething(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

列表永远不会改变,它只是迭代并且并行读取.不写字段或类似的东西.

谢谢.

Jon*_*eet 52

是的,List<T>可以同时从多个线程读取,只要没有写入.

文档:

A List<T>可以同时支持多个读取器,只要不修改集合即可.

编辑:请注意,您的代码不一定使用List<T>- 只是一个IList<T>.你知道返回的类型GetData()吗?如果你控制了GetData()你,你可能想要记录它返回的列表对于读取是否是线程安全的,如果它实际上是返回a List<T>.