我有一个存储过程调用时做大量的处理。存储过程的各个部分都被封装在自己的事务中,但是整个过程都被封装起来。不会在事务中运行,因为这会造成不必要的阻塞和危害性能。我遇到的问题是,如果用户在proc后关闭用户界面。已经开始并且在它结束之前,连接关闭并且proc。停止执行。如何异步执行一个SQL Server存储过程,并确保它完成
有没有办法做到这一点异步或在另一个进程,如果用户界面应用程序在处理过程中关闭,不会中止。
我有一个存储过程调用时做大量的处理。存储过程的各个部分都被封装在自己的事务中,但是整个过程都被封装起来。不会在事务中运行,因为这会造成不必要的阻塞和危害性能。我遇到的问题是,如果用户在proc后关闭用户界面。已经开始并且在它结束之前,连接关闭并且proc。停止执行。如何异步执行一个SQL Server存储过程,并确保它完成
有没有办法做到这一点异步或在另一个进程,如果用户界面应用程序在处理过程中关闭,不会中止。
看在C#任务并行库。 您可以创建一个非常简单的任务。例如...
Task myTask= new Task(() => {
Console.WriteLine(@"hello");
//Call stored procedure here
});
myTask.start();
这将运行包含在任务中的代码并行与主线程。如果你想检查任务完成后,您可以使用
if(myTask.IsCompleted())
{
Console.WriteLine(@"My task is finished");
}
这种方法回避改变存储过程,并允许C#来处理性能。
编辑: - ,避免主线程完成第一添加
Task.WaitAll(myTask);
这会睡在主线程,直到任务完成。
呼叫SP_Start_Job初始化存储过程。修改存储过程以向表写入完成标志。在您的应用中的线程上轮询表格。
两个这样做的方法:
可以构建在一个单独的线程执行存储过程C#的服务。 GUI只负责告诉服务启动程序并询问任务是否完成。 GUI可以关闭并重新打开,服务仍然可以正常运行。
运行SQL Server代理作业。从GUI开始作业并定期检查它是否完成。
如果只有你需要确保完成我与第二个选择走这仅限SP。我已经尝试过使用Integration Services作为“服务”的方式,但它是渴望运行我们需要异步运行的进程数量的方式......不断地耗尽内存。
请问你需要同时运行存储过程的多个实例?你正在使用什么版本的SQL Server? –
SQL Server 2008 R2。 – Andrew
@Andres - 这是版本不是版本,你仍然没有回答我的其他问题。询问两者的理由是查看是否可以选择SQL代理作业(不是快速提供)。 –