Я не могу понять, почему мой следующий код не работает должным образом. Это упрощенная версия этого
public class TheClass
{
protected void SomeMethod(List<string> works)
{
ConcurrentBag<MyResult> mySafeCollection= new ConcurrentBag<MyResult>();
Parallel.ForEach(works, work=>
{
mySafeCollection.Add(GetResult(work));
}
}
private MyResult GetResult(string work)
{
ResultClass result = new ResultClass ();
result.Id = "some text";
//Some work here to set result.Value
return result;
}
}
Как видно, у меня есть класс, который получает список строк, работает, а затем вызывает некоторый локальный метод, который выполняет некоторую работу и возвращает объект результата. Я ожидаю, что количество элементов в mySafeCollection всегда будет таким же, как работы, и также ни один из элементов в mySafeCollection никогда не будет нулевым, поскольку я возвращаю новый экземпляр объекта результата для каждого вызова, но это не так !!! Иногда в mySafeCollection отсутствует элемент или один из его элементов имеет значение null, что означает, что GetResult вернул значение null. Это не имеет смысла! Результат создается для каждого вызова метода GetResult. Сначала я думал, что это из-за коллекции mySafeCollection, в которой она была списком, проблема связана с ошибками в методе List.Add, но даже переключение на ConcurrentBag не решило проблему. Любая подсказка?