3

我正在通过以下方式使用polly策略进行重试:

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

我正在使用AsyncErrorHandler来处理所有 Web 异常:

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

然而,我想对 GUI 提出一些期望。有了这段代码,我怎样才能防止处理特定的异常,而是把它扔给 GUI?

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

4

1 回答 1

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);
    }
}

编辑更新。

如需帮助处理错误:捕获和重新抛出 .NET 异常的最佳实践

于 2015-12-01T21:00:16.920 回答