Использование C # / .NET 3.5.
В настоящее время я заполняю 2 DataTables один за другим, используя SqlDataAdapter.Fill ().
Я хочу заполнить обе эти таблицы данных параллельно, выполняя каждую из них асинхронно. Однако асинхронной версии метода Fill () не существует, т. Е. Было бы здорово BeginFill ()!
Один из подходов, которые я пробовал, (псевдо):
- SqlCommand1.BeginExecuteReader // 1-й запрос, для DataTable1
- SqlCommand2.BeginExecuteReader // 2-й запрос, для DataTable2
- SqlCommand1.EndExecuteReader
- SqlCommand2.EndExecuteReader
- DataTable1.Load (DataReader1)
- DataTable2.Load (DataReader2)
Однако DataTable.Load () занимает много времени:
Шаг 1 - шаг 4 занимает 3 секунды.
Шаг 5 затем занимает 22 секунды.
Шаг 6 занимает 17 секунд.
Итак, в сумме 39 секунд для шагов 5 и 6.
Конечный результат заключается в том, что это не дает мне никакой выгоды по сравнению с выполнением двух SqlDataAdapter.Fills, один за другим. Я хочу, чтобы итоговым результатом было то, что весь процесс занимает столько времени, сколько длится самый длинный запрос (или как можно ближе к нему).
В поисках рекомендуемых путей продвижения к чему-то, что является действительно асинхронным подходом к заполнению DataTable.
Или я сам управляю им и запускаю 2 отдельных потока, каждый из которых заполняет DataTable?