让我们留下以下代码:
Var task = Task.Run(() => RunTest(ct.Token));
Void RunTask(CancellationToken token)
{
If (!token.IsCancellationRequested)
}
Cmd.CommandText = code;
Cmd.ExecuteNonQuery();
}
}
现在取消正在运行的长时间运行的SQL查询,如果请求取消,如何终止长时间运行的SQL查询,如何立即终止任务?我知道'取消()',但我如何根据cancellationToken触发它?
答案 0 :(得分:3)
如果您使用ExecuteNonQuery
,则运行您的任务的线程正在某个人的代码中等待 - 您无法使用此命令并执行其他工作。
但好消息是,你不需要它。只需使用ExecuteNonQueryAsync
,让SqlCommand
对象自行处理取消。
async Task RunTask(CancellationToken token)
{
Cmd.CommandText = code;
await Cmd.ExecuteNonQueryAsync(token);
}
您可能还想Unwrap
此task
变量中的Task<Task>
变量,因为它现在是Task
而且通常,如果您对此感兴趣,那么您将是感兴趣内部Task.Run
何时完成。
或者您可能想要考虑是否需要Task.Run
。这取决于在第一种情况下RunTask
插入到您的示例中的原因以及实际活动<div class="source">
<a href="#"><h3>source</h3></a>
</div>
<div class="share">
<h3>share</h3>
</div>
<div class="share">
<h3>tweet</he>
</div>
的执行情况。
答案 1 :(得分:0)
要取消SqlCommand
,您应该使用SqlCommand.Cancel()
方法
看看这里:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.cancel.aspx