Цикл задачи в Main () - PullRequest
       16

Цикл задачи в Main ()

0 голосов
/ 06 апреля 2019

У меня есть

foreach (FileInfo flInfo in dir.GetFiles())
            {
                String name = flInfo.Name;
                Console.WriteLine("{0, -30:g} ", name);
                Task<DataTable> mergeTable = processFile(name);
                 table.Merge(mergeTable.Result);
            }

Как мне зациклить эту задачу с другой переменной mergeTable?

Чтобы быть более точным в том, что я прошу В настоящее время я делаю это.

Task<DataTable> mergeTable01 = processFile("filename1.txt");
Task<DataTable> mergeTable02 = processFile("filename2.txt");
Task<DataTable> mergeTable03 = processFile("filename3.txt");
Task<DataTable> mergeTable04 = processFile("filename4.txt");

Task.WaitAll(mergeTable01,mergeTable02,mergeTable03,mergeTable04);

table.Merge(mergeTable01.Result);
table.Merge(mergeTable02.Result);
table.Merge(mergeTable03.Result);
table.Merge(mergeTable04.Result);

Как мне повторить эту повторяющуюся задачу и, наконец, объединить данные?

1 Ответ

1 голос
/ 08 апреля 2019

Если вы хотите запустить все задачи для асинхронной обработки, вам нужно, как говорит Кевин, запустить и добавить их в List<Task<T>>, а затем вызвать Task.WhenAll для этой коллекции.

List<Task<DataTable>> dataTableTasks = new List<Task<DataTable>>();
foreach (FileInfo flInfo in dir.GetFiles())
{
    String name = flInfo.Name;
    Console.WriteLine("{0, -30:g} ", name);
    Task<DataTable> mergeTable = processFile(name);
    dataTableTasks.Add(mergeTable);
}

await Task.WhenAll(dataTableTasks);

foreach(Task<DataTable> dataTableTask in dataTableTasks)
{
    table.Merge(await dataTableTask);
}
...