这会取消 ExecuteReaderAsync 吗

Will this cancel an ExecuteReaderAsync

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

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

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

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

如果在不同的线程上调用 _cancellationTokenSource.Cancel(),是否会适当取消查询?

能够找到问题的合适解决方案。给定取消令牌和 SQLCommand,将加载包装到数据 table 如下成功取消数据库查询:

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

因此,当 cancellationToken 在不同的线程中被取消时,cmd.Cancel 会被自动调用。这将引发我必须处理并执行清理的 SqlException。