Как лучше всего поймать исключение «Операция отменена пользователем»

у меня есть следующий кусок кода:

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 это предупреждение удалено. И мне также не нравятся другие реализации, когда метод отмены вызывается из другого потока, так как для меня это усложняет код

10
задан and85 19 April 2012 в 10:37
поделиться