使用 Polly 时抛出特定异常

Throwing specific exception when using 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.

中收到一个未处理的错误消息对话框

以不同的方式实现它,只在您想要向用户显示的错误上抛出错误,然后捕获您想要抛出的错误,并根据其内容执行您想要的操作(向用户显示或不显示)。

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