停止线程中的事务

时间:2010-10-28 06:55:19

标签: c# sql-server multithreading transactions

我在线程中使用 TransactionScope 来转储我的SQL Server数据库中的数据。

using (TransactionScope scope = new TransactionScope())
{
    // Dump data in database
    scope.Complete();
}

该事务是一个长事务(~40秒),因为数据量很大。这很正常。

当我在此事务中执行Abort()停止线程时,SQL Server似乎被锁定了几分钟。

发生了什么,我该如何避免这种情况?

1 个答案:

答案 0 :(得分:2)

简单地说:你做不到。

  

服务器似乎在几个期间被锁定   分钟。

没有。 SQL Server正忙于撤消您的事务。它完全针对COMMIT事务进行了优化,而不是撤消它们。撤消LARGE更新是SLOW操作。根据您的服务器布局和数据量,它可能需要几分钟甚至几小时。

你所能做的就是......不回滚/中止。或者等一下。