C# 如何异步执行sql server存储过程并确保它';完成
我有一个存储过程,调用它时会进行大量处理。存储过程的各个部分都封装在它们自己的事务中,但整个过程都是这样。不会在事务中运行,因为这将导致不必要的阻塞并损害性能。我的问题是,如果用户在进程结束后关闭用户界面。已启动,在其结束之前,连接将关闭,进程将停止。停止执行 如果用户界面应用程序在处理过程中关闭,是否有任何方法可以异步或在另一个不会中止的进程中执行此操作。查看C#Task并行库。 您可以创建一个非常简单的任务。例如C# 如何异步执行sql server存储过程并确保它';完成,c#,sql-server-2008,C#,Sql Server 2008,我有一个存储过程,调用它时会进行大量处理。存储过程的各个部分都封装在它们自己的事务中,但整个过程都是这样。不会在事务中运行,因为这将导致不必要的阻塞并损害性能。我的问题是,如果用户在进程结束后关闭用户界面。已启动,在其结束之前,连接将关闭,进程将停止。停止执行 如果用户界面应用程序在处理过程中关闭,是否有任何方法可以异步或在另一个不会中止的进程中执行此操作。查看C#Task并行库。 您可以创建一个非常简单的任务。例如 Task myTask= new Task(() => {
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\u Start\u Job初始化存储过程。修改存储过程以将完成标志写入表。在应用程序中的线程上轮询表。有两种方法:
如果你只有这个sp,你需要确保完成,我会选择第二个选项。我早就尝试过将集成服务作为“服务”来使用,但它对运行异步运行所需的进程数量非常渴望。。。内存不断耗尽。您是否需要同时运行多个存储过程实例?您使用的是哪一版本的SQL Server?@Andres-这是版本而不是版本,您仍然没有回答我的另一个问题。询问两者的原因是为了查看SQL代理作业(在express中不可用)可能是一个选项。尝试此操作我使用的是Express edition,该过程必须能够根据@Dmitry的链接对SQL Server解决方案service broker同时运行H OK(确定)。如果主应用程序进程在任务完成之前结束,任务会发生什么情况?@Andrew-我已将解决方案更新为展示这是如何解决的。谢谢,我有一个游戏,这确实是一种工作。我需要一个能够适应断电等情况的解决方案。如果断电,您希望发生什么情况?我不完全理解您的意思…由于sp正在长时间运行,我希望确保即使触发sp调用的ui已关闭或计算机出现电源故障,它也能完成。我现在在看wcf或者nservicebus。服务器上的服务可以运行sp。请注意,这些计算机是平板电脑设备,在处理过程中很容易断电