У меня есть около 10 таблиц SQL, которые мне нужны для извлечения данных, обработки, а затем вставки этих данных в другую таблицу. Я не хочу делать их все параллельно, но я хотел бы использовать все время ввода-вывода.Async Await обработка верхнего уровня
У меня есть функция:
public async Task PromoteAsync()
{
try
{
using (HTTransDB transactions = new HTTransDB())
using (ZImportMaster importMaster = new ZImportMaster())
using (ZMasterAddress masterAddress = new ZMasterAddress())
{
// Select out non error rows
DataTable dt = await HTTransDB.GetValidRowsAsync(this.TableConfig.BatchID, this.TableConfig.SourceTableName);
// Do stuff
// insert data
using (HTTransDB transactionsDB = new HTTransDB())
{
int result = await transactionDB.BulkCopyAsync(dt);
}
}
}
catch (Exception e)
{
// log exception and re-throw
}
}
я запустить эту функцию в цикле Еогеаспа для каждой таблицы:
public async Task PromoteLoad()
{
// Load each batch
foreach (var table in this.Tables)
{
await table.PromoteAsync();
}
}
Моего вопрос, как я называю эту функцию из не метода асинхронного ? Task.Run
? Я не хочу запускать новые потоки, я просто хочу, чтобы процесс продолжал работать, ожидая ввода-вывода.
Вы пробовали 'PromoteLoad()'? – EZI
Какое приложение? Это консольное приложение? Веб-приложение? Приложение WPF/WinForms? Какую еще работу вы ожидаете во время работы IO, и на каком потоке? У вас есть больше кода, который необходимо выполнить после завершения работы async? – sstan
Это работает в службе окон, которая считывает очередь. Я просто хотел бы перейти к следующей таблице, если последний ждет io. – Dave