2015-12-01 3 views
2

Я использую polly политики для повторных попыток следующим образом:Бросив конкретные исключения при использовании Polly

results = await Policy 
       .Handle<WebException>() 
       .WaitAndRetryAsync 
       (
        retryCount: 5, 
        sleepDurationProvider: retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) 
       ) 
       .ExecuteAsync(async() => await task.Invoke()); 

Я использую AsyncErrorHandler обрабатывать все веб-исключения:

public static class AsyncErrorHandler 
{ 
    public static void HandleException(Exception ex) 
    { 
     Debug.WriteLine(ex.Message); 
    } 
} 

Однако некоторые ожиданий, которые я хотел бы поднять на графический интерфейс. С помощью этого кода, как я могу предотвратить обработку конкретного исключения и вместо этого отправить его в графический интерфейс?

[UPDATE] Если я вызываю конкретное исключение внутри функции HandleException, я получаю диалоговое окно с необработанным сообщением об ошибке в Visual Studio.

ответ

1

Реализуйте это по-другому, чтобы только бросать ошибки на те, которые вы хотите отобразить пользователю, а затем ловить те, которые вы хотите бросить, и делать то, что хотите, с их содержимым (либо показать пользователю, либо нет).

try 
{ 
     results = await Policy 
      .Handle<WebException>() 
      .WaitAndRetryAsync 
      (
       retryCount: 5, 
       sleepDurationProvider: retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) 
      ) 
      .ExecuteAsync(async() => await task.Invoke()); 
} 

catch (ExceptionToThrowToUser ex) 
{ 
    MessageBox.Show(ex.Message); 
} 


public static class AsyncErrorHandler 
{ 
    public static void HandleException(Exception ex) 
    { 
     if (ex is ExceptionToThrowToUser) 
     { 
      throw;    
     } 
     else 
      Debug.WriteLine(ex.Message); 
    } 
} 

Отредактировано для уточнения.

Для обработки ошибок справки: Best practices for catching and re-throwing .NET exceptions

+0

кода вы вывесили, хотя, не использует AsyncErrorHandler, который цитируется в этом вопросе. –

+0

Совершенно верно, неправильно сформулировал вопрос. –

+0

HandleException всегда вызывается, когда я получаю исключение. Если я выброшу ошибку внутри класса AsyncErrorHandler, в Visual Studio появится диалоговое окно с указанием ошибки вместо заполнения исключения до GUI. – doorman

Смежные вопросы