使用Polly时抛出特定异常

时间:2015-12-01 20:53:14

标签: c# rest 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);
    }
}

然而,我想提出一些想法到GUI。 使用此代码,如何防止处理特定异常,而是将其抛入GUI?

[更新]如果我在HandleException函数中抛出一个特定的异常,我在Visual Studio中收到一个未处理的错误消息对话框。

1 个答案:

答案 0 :(得分:2)

以不同的方式实现它,只是将错误抛出给你想要显示给用户的那些,然后抓住那些你想要抛出的东西并用你的内容做你想做的事情(无论是否显示给用户)。

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