Я хотел бы использовать новую Параллель. ForEach функционируют, чтобы циклично выполниться через таблицу данных и выполнить действия с каждой строкой. Я пытаюсь преобразовать код ниже:
foreach(DataRow drow in dt.Rows)
{
...
Do Stuff
...
}
К этому коду:
System.Threading.Tasks.Parallel.ForEach(dt.Rows, drow =>
{
...
Do Stuff
...
});
Когда я выполняю новый код, я получаю ошибку:
Аргументы типа для метода 'Система. Поточная обработка. Задачи. Параллель. ForEach (Система. Наборы. Универсальный. IEnumerable, Система. Действие)', не может быть выведен из использования. Попытайтесь указать аргументы типа явно.
Каков правильный синтаксис для этого?
DataTable.Rows
возвращает DataRowCollection
, который реализует только IEnumerable
, а не IEnumerable
. Используйте метод расширения AsEnumerable()
на DataTable
(из DataTableExtensions
) вместо этого:
Parallel.ForEach(dt.AsEnumerable(), drow =>
{
...
Do Stuff
...
});
Parallel.ForEach() ожидает, что первый аргумент будет типа IEnumerable<>. DataTable.Rows таковым не является, но вы можете превратить его в таковой с помощью метода расширения AsEnumerable(). Try:
... Parallel.ForEach(dt.AsEnumerable(), drow => ...