Parallel.For与null对象同步

buf*_*erz 1 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;
}
Run Code Online (Sandbox Code Playgroud)

我不希望在列表中得到null,但我是.我必须以index某种方式拙劣地使用它.有任何想法吗?

Hen*_*man 6

List<MyObj> results不是线程安全的.

您看到空值,因为results在许多方面可能无效.

使用Thread-safe集合类results使用lock语句保护对自己的每次访问.