【问题标题】:Throwing specific exception when using Polly使用 Polly 时抛出特定异常
【发布时间】:2015-12-02 07:16:00
【问题描述】:

我正在使用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 中收到未处理的错误消息对话框。

【问题讨论】:

    标签: c# rest polly


    【解决方案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

    【讨论】:

    • 不过,您发布的代码并未使用问题中引用的 AsyncErrorHandler。
    • 当我收到异常时,总会调用 HandleException。如果我在 AsyncErrorHandler 类中抛出错误,Visual Studio 中会弹出一个对话框,显示错误,而不是将异常填充到 GUI。
    • 你扔得怎么样?你只是显示信息还是直接抛出 ex;?这就是为什么我个人只是将消息扔到 MessageBox 中,让用户看看我是否希望他们这样做。
    • 更新了答案。是的,你仍然需要处理代码中的错误!
    • 是的,我只是把 ex 扔了,因为我想在 GUI 代码中专门处理它,清除一些变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多