我正在使用System.Threading.Tasks.Parallel.For
进行重量级处理。
我的代码是:
int count = 10;
List<MyObj> results = new List<MyObj>();
Parallel.For(0, count, (index) =>
{
MyObj obj = GetMyObjMaybe();
if (obj != null)
results.Add(obj);
});
if (results.Contains(null))
{
//break here, and it does
}
//sometimes contains null objects
return results;
}
我不希望在列表中获得null,但我是。我必须以某种方式拙劣地使用index
。有什么想法吗?
答案 0 :(得分:6)
您的List<MyObj> results
不是线程安全的。
您看到的是空值,因为results
在很多方面都可能无效。
使用Thread-safe collection class或使用results
语句保护对lock
的每次访问权限。