多次调用相同的方法并显示进度

时间:2014-12-22 10:09:53

标签: c# asp.net sql-server asynchronous threadpool

我有一个存储过程,可以运行动态查询并将结果集生成到静态表。作为回报,它将如下所示(概念上) enter image description here

我可以通过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
    }

这是正确的还是其他任何方式来实现这一目标?

如果您能将我重定向到一些已经完成此类工作的博客/白皮书/样本,我将不胜感激

P.S。:以上代码仅基于假设,在语法方面可能不正确。

1 个答案:

答案 0 :(得分:0)

您走在正确的轨道上,但不要使用Task.Wait()因为这会导致死锁。 See Best Practices in Asynchronous Programming。您只需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
}