如果我创建一个CancellationTokenSource并将其传递到我执行这样的查询的地方:
await command.Connection.OpenAsync();
dataReader = await command.ExecuteReaderAsync(_cancellationToken);
如果紧接在此之下,我添加以下内容:
_cancellationToken.ThrowIfCancellationRequested();
resultTable.Load(dataReader);
如果在另一个线程上调用了_cancellationTokenSource.Cancel(),那么查询会被适当取消吗?
答案 0 :(得分:0)
能够找到解决问题的合适方案。给定取消令牌和SQLCommand,将加载包装到数据表中成功取消db查询:
using (CancellationTokenRegistration ctr = cancellationToken.Register(() => cmd.Cancel()))
{
using (var reader = cmd.ExecuteReaderAsync(cancellationToken))
{
dataTable.Load(reader.Result);
}
}
因此,当在另一个线程中取消了cancellationToken时,会自动调用cmd.Cancel。这将抛出我必须处理并执行清理的SqlException。