Parallel.For与null对象同步

时间:2010-10-14 18:51:05

标签: c# task-parallel-library

我正在使用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。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您的List<MyObj> results 是线程安全的。

您看到的是空值,因为results在很多方面都可能无效。

使用Thread-safe collection class或使用results语句保护对lock的每次访问权限。