C# Linq-存储过程的中断执行

C# Linq-存储过程的中断执行,c#,sql-server,multithreading,linq,stored-procedures,C#,Sql Server,Multithreading,Linq,Stored Procedures,我正在开发一个从SQL server调用存储过程的C#应用程序。根据用户输入的搜索参数,存储过程可能需要一段时间并返回许多记录 我想实现一个cancel按钮,这样用户可以在需要很长时间时取消存储过程的执行。我在一个新线程中运行对存储过程的调用,这样当存储过程需要一段时间时,GUI不会受到影响。我读过关于中止线程的文章,但发现很多人反对使用中止 我认为可能的解决办法是: 是否有停止执行存储过程(这是c代码中的一种方法)的常见方式 有没有更好的方法停止线程?(我还发现了Thread.Interru

我正在开发一个从SQL server调用存储过程的C#应用程序。根据用户输入的搜索参数,存储过程可能需要一段时间并返回许多记录

我想实现一个cancel按钮,这样用户可以在需要很长时间时取消存储过程的执行。我在一个新线程中运行对存储过程的调用,这样当存储过程需要一段时间时,GUI不会受到影响。我读过关于中止线程的文章,但发现很多人反对使用中止

我认为可能的解决办法是:

  • 是否有停止执行存储过程(这是c代码中的一种方法)的常见方式
  • 有没有更好的方法停止线程?(我还发现了Thread.Interrupt(),但这只适用于阻塞的线程,而不适用于运行的代码)
  • 我可以放弃这个线程并启动一个新的线程,但随后会使用不必要的数据库和网络资源
  • 有没有办法从服务器端停止存储过程

您可以尝试放弃进程服务器端,但它需要高权限(服务器管理),因此在大多数情况下不可行

线程中止可以工作(不推荐),但我不确定db是否会停止处理


最后,我不确定是否有任何有效的方法。

您可以中止线程,但查询仍将运行,因为它由SQL server托管。

您可能不想在此处使用Linq。试试这个:

基本上使用SqlCommand.Cancel()


在黑暗中拍摄,但是断开datacontext上的连接,或者将调用包装在transactionscope中并调用“回滚”会阻止它吗?