gpt4 book ai didi

c# - 使用单个巨大任务(例如 SQL 查询)杀死/中止线程

转载 作者:太空狗 更新时间:2023-10-30 01:28:08 25 4
gpt4 key购买 nike

好的,

这里似乎有很多关于 Thread.Abort() 有多可怕以及如何通过在循环中添加退出检查来解决在代码中使用 Thread.Abort() 的讨论。

这假设您控制工作的分区方式,其粒度足以遍历它。

但我该如何执行以下操作:

  1. 启动工作线程以执行某些操作,同时保持 UI 响应。出于所有意图和目的,工作线程的代码如下所示:

    public override void Run()
    {
    try
    {
    _dataTable = ExecuteSingleGinormousSqlQuery();
    } finally
    {
    // close the connection if it was left open.
    }
    }
  2. 具有“取消”按钮,以便用户在厌倦等待时可以中断此操作。

似乎除了 Thread.Abort() 之外没有其他解决方法。真的吗?此外,在实证测试中,Thread.Abort() 似乎甚至不会真正杀死线程,直到进行查询的调用为止,例如

    new SqlDataAdapter(cmd).Fill( ds );

首先返回,因此显着否定了它的效用。

有解决办法吗?最佳做法?

最佳答案

SqlCommand 对象有一个 Cancel()您可以从另一个线程调用该方法以尝试取消正在运行的 SQL 查询。它不能保证成功,并且取决于数据库、驱动程序和实际运行的查询,但您可能会发现它可以满足您的需要。

关于c# - 使用单个巨大任务(例如 SQL 查询)杀死/中止线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com