我有一个存储过程,可以运行动态查询并生成一个结果集到静态表。作为回报,它将看起来像下面(从概念上)
我可以通过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
}
这是正确的方法还是其他实现方法?
如果您可以将我重定向到完成此工作的某些博客/白皮书/示例,将不胜感激
附注:以上代码仅基于假设,因此在语法上可能不正确。
最佳答案
您处在正确的轨道上,但是请勿使用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
}