我有以下的代码片段:
怎样才能确定捕获的异常是由操作取消引起的呢?
在这种情况下,ExecuteNonQuery会抛出一个错误代码为0x80131904的异常,但这是一个非常普遍的异常,可能由许多原因引起。错误信息看起来像这样:“当前命令发生了严重错误。如果有任何结果,应该被丢弃。\r\n操作被用户取消。”
除了解析错误信息之外,我没有看到其他选项... 有什么想法吗?
谢谢
附注:是的,我知道在异步操作中使用Cancel命令可能不是最好的主意,因为在.NET 2.0的MSDN文档中有一个警告。但在.NET 4.0的文档中,这个警告被移除了。 我也不喜欢其他在另一个线程中调用取消方法的实现,因为对我来说这会使代码更加复杂。
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操作被用户取消。”
除了解析错误信息之外,我没有看到其他选项... 有什么想法吗?
谢谢
附注:是的,我知道在异步操作中使用Cancel命令可能不是最好的主意,因为在.NET 2.0的MSDN文档中有一个警告。但在.NET 4.0的文档中,这个警告被移除了。 我也不喜欢其他在另一个线程中调用取消方法的实现,因为对我来说这会使代码更加复杂。