假设我们的前端应用程序(C#)建立了到SQL Server的一系列连接并执行了一系列存储过程,这些过程可能需要几个小时才能完成。我需要有一种设施来“取消”正在运行的存储过程。我知道这可以通过Sqlcommand.Cancel()
来实现,但这似乎并非始终有效。有没有更好的方法来实现这一目标?
最佳答案
如果取消不起作用,则杀死可能也不起作用。他们必须使用相同的机制。在内部为它们使用不同的机制没有任何意义。
我需要从前端完成此操作,理想情况下,用户将取消自己长时间运行的SQL命令
尽管操作仍在后台完成,但是向用户模拟取消操作是一种常见的技术。在.NET中,有多种操作无法立即取消。在这种情况下,最好的选择是隔离该操作,并使其在后台完成。
TPL使这相当容易。您可以搜索“ .net取消任务”或“ .net取消无法取消的任务”以获取一些指针。同样,该想法是仅继续执行并且仅请求取消,而不等待它。
您无需使用async/await
或异步SqlCommand方法即可完成此工作,但是可以。仅提及这一点是因为这是一个常见的误解。
关于c# - 终止长时间运行的SQL命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35709969/