Parallel.For для синхронизации с нулевыми объектами - PullRequest
1 голос
/ 14 октября 2010

Я использую 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. Есть идеи?

1 Ответ

6 голосов
/ 14 октября 2010

Ваш List<MyObj> results является не поточно-ориентированным.

Вы видите нули, потому что results может быть недействительным во многих отношениях.

Либо используйте Потокобезопасный класс коллекции , либо защитите каждый доступ к results самостоятельно с помощью оператора lock.

...