1

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;
}

我不希望在列表中得到空值,但我是。我一定是搞砸了index不知何故的使用。有任何想法吗?

4

1 回答 1

6

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

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

要么使用线程安全的集合类,要么使用语句保护对results自己的每次访问。lock

于 2010-10-14T18:53:14.793 回答