у меня есть следующий кусок кода:
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. Да, я знаю, что команда Cancel для асинхронной операции, вероятно, не лучшая идея, потому что для.NET 2.0 было предупреждение на MSDN, но для.NET 4.0 это предупреждение удалено. И мне также не нравятся другие реализации, когда метод отмены вызывается из другого потока, так как для меня это усложняет код