这会取消ExecuteReaderAsync吗?



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

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

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新