我有以下代码和平:
IAsyncResult beginExecuteReader = command.BeginExecuteNonQuery();
while (!beginExecuteReader.IsCompleted)
{
if (controllerTask.CancellationTokenSource.IsCancellationRequested)
{
command.Cancel();
}
Thread.Sleep(100);
}
try
{
result = command.EndExecuteNonQuery(beginExecuteReader);
}
catch (SqlException exception)
{
if (exception.ErrorCode == OperationCanceled)
{
throw new OperationCanceledException();
}
throw;
}
我如何识别捕获的异常是由操作取消引起的。在这种情况下,ExecuteNonQuery 会抛出错误代码为 0x80131904 的异常,但这是非常普遍的异常,可能由多种原因引起。错误消息如下所示:{“当前命令发生严重错误。结果(如果有)应被丢弃。\r\n操作已被用户取消。”}
除了解析错误消息外,我没有看到任何选项......有什么想法吗?
谢谢
PS。是的,我知道取消异步操作的命令可能不是最好的主意,因为对于 .NET 2.0,MSDN 上有警告,但对于 .NET 4.0,此警告已被删除。当从另一个线程调用取消方法时,我也不喜欢其他实现,因为对我来说它使代码更加困难