Вызов одного и того же метода несколько раз и показ прогресса
У меня есть хранимая процедура, которая может выполнять динамический запрос и производить набор результатов в статической таблице. который в свою очередь будет выглядеть ниже (концептуально)
Я могу отобразить результат пользователю через SQL Dependency или node.js, но я хочу понять, как именно я могу выполнить одну и ту же хранимую процедуру несколько раз и ждать выполнения ответа?
Допустим, функция, вызывающая SP, называется fnCallSPForDynamicExec. Вызов этой функции несколько раз (с использованием многопоточности) поможет мне. Что-то вроде этого
Page_Load()
{
foreach(var task in tasklist)
{
Task taskWork = Task.Run(new Action(fnCallSPForDynamicExec(task.taskid));
// Do something on UI
taskWork.Wait();
// Do something on UI
}
}
private void fnCallSPForDynamicExec (int task id)
{
//call dynamic SP
}
Это правильно или любой другой способ добиться этого?
Я был бы признателен, если бы вы могли перенаправить меня на какой-нибудь блог / документ / образец, который проделал такую работу
PS: Приведенный выше код основан только на предположении, он может быть неверным с точки зрения синтаксиса.
1 ответ
Вы на правильном пути, но не используете Task.Wait()
как это может привести к тупику. См. Лучшие практики в асинхронном программировании. Вы можете просто await
призыв к Task.Run
,
public void async Page_Load()
{
foreach(var task in tasklist)
{
await Task.Run(() => fnCallSPForDynamicExec(task.taskid));
// Do something on UI
}
}
private void fnCallSPForDynamicExec (int taskid)
{
//call dynamic SP
}