Вызов одного и того же метода несколько раз и показ прогресса

У меня есть хранимая процедура, которая может выполнять динамический запрос и производить набор результатов в статической таблице. который в свою очередь будет выглядеть ниже (концептуально)

Я могу отобразить результат пользователю через 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
}
Другие вопросы по тегам