Можно ли использовать Parallel.ForEach () в документе XML? - PullRequest
0 голосов
/ 26 сентября 2019

Прочитав MSDN How To: документ об использовании parallel.foreach () Я подумал, что смогу распараллелить некоторые долго выполняющиеся части моего кода - однако Visual Studio выдает сообщение об ошибке, котороеЯ изо всех сил пытаюсь понять, и я больше не уверен, что XmlNodeList это System.Collections.IEnumerable или нет!

Мой код:

Parallel.ForEach(Doc.GetElementsByTagName("Details2"), Sub(Node As XmlNode)
      'do something, for instance
      For Each tAttribute As XmlAttribute In Nodede.Attributes
          debug.writeline(tAttribute.value)
      next
   End Sub)

Затем я получаюсообщение об ошибке:

Ошибка BC30518 Не удалось разрешить перегрузку, поскольку невозможно вызвать доступный «ForEach» с этими аргументами: «Public Shared Overloads Function ForEach (Of TSource) (источник как IEnumerable (Of TSource), тело»As Action (Of TSource)) As ParallelLoopResult ': Тип (ы) данных параметра (ов) типа не может быть выведен из этих аргументов.Явное указание типов данных может исправить эту ошибку.

Куда я иду?

1 Ответ

2 голосов
/ 26 сентября 2019

Класс XmlNodeList реализует интерфейс IEnumerable.Однако Parallel.ForEach ожидает параметр IEnumerable(Of T) (или, в данном случае, IEnumerable(Of XmlNode)).Таким образом сбой разрешения перегрузки.Вам нужно привести объект XmlNodeList к IEnumerable(Of XmlNode).

Попробуйте что-то вроде этого:

Parallel.ForEach(doc.GetElementsByTagName("Details2").OfType(Of XmlNode),
                 Sub(node As XmlNode)
                     'do something, for instance
                     For Each tAttribute As XmlAttribute In node.Attributes
                         Debug.WriteLine(tAttribute.Value)
                     Next
                 End Sub)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...