none
C# Parallel.ForEach RRS feed

  • Вопрос

  • Здравствуйте.

    List<IDBVolumetricObject> newList = new List<IDBVolumetricObject>();
    Parallel.ForEach(allVols, (vol) =>
    {     
       newList.Add(vol);
    });
    Возможно ли такое, что в newList могут оказаться null-значения?

    20 января 2016 г. 12:33

Ответы

  • 1. Да. Причем это может произойти даже если таких значений нет в исходной последовательности из за ошибки в коде (нет синхронизации доступа к списку).

    2. Из за малой длительности каждой операции и необходимости синхронизации использование PLinq в данном случае скорее всего нецелесообразно.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа glebov21 21 января 2016 г. 7:35
    20 января 2016 г. 16:50
    Модератор

Все ответы

  • 1. Да. Причем это может произойти даже если таких значений нет в исходной последовательности из за ошибки в коде (нет синхронизации доступа к списку).

    2. Из за малой длительности каждой операции и необходимости синхронизации использование PLinq в данном случае скорее всего нецелесообразно.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа glebov21 21 января 2016 г. 7:35
    20 января 2016 г. 16:50
    Модератор
  • я опустил весь код с манипуляциями над vol, поэтому там не малая длительность. 

    А как сделать эту синхронизацию? Только через lock(newList)? Как быстрее?

    21 января 2016 г. 6:53
  • Проще выполнить запрос как обычно (добавив AsParallel() к исходной последовательности) и потом вызвать .ToList() на результат.

    Смотрим так же тут по настройкам слияния результатов:

    https://msdn.microsoft.com/en-us/library/dd997424(v=vs.110).aspx


    This posting is provided "AS IS" with no warranties, and confers no rights.

    21 января 2016 г. 7:31
    Модератор