这会取消ExecuteReaderAsync吗?

本文关键字:ExecuteReaderAsync 取消 | 更新日期: 2023-09-27 18:04:03

如果我创建一个CancellationTokenSource并将其传递到执行如下查询的地方:

await command.Connection.OpenAsync();
dataReader = await command.ExecuteReaderAsync(_cancellationToken);

如果紧接在下面,我添加以下内容:

_cancellationToken.ThrowIfCancellationRequested();
resultTable.Load(dataReader);

如果在另一个线程上调用_cancellationTokenSource.Cancel(),查询会被适当地取消吗?

这会取消ExecuteReaderAsync吗?

能够找到一个体面的解决方案。给定取消令牌和SQLCommand,将加载包装到数据表中,如下所示成功地取消了db查询:

using (CancellationTokenRegistration ctr = cancellationToken.Register(() => cmd.Cancel()))
{
     using (var reader = cmd.ExecuteReaderAsync(cancellationToken))
     {
         dataTable.Load(reader.Result);
     }
}

所以当cancellationToken在另一个线程中被取消时,cmd。自动调用Cancel。这将抛出一个我必须处理并执行清理的SqlException。

相关文章:
  • 没有找到相关文章