1

我已经设置了我的 Xamarin 核心项目,其中包含我从这里阅读的许多提示。

我有一个简单的服务,用于查看输入的服务器 url 是否有效:IValidateUrlService

我正在尝试使用Polly库来执行以下操作:

var request = new PingUrlRequest();
var validateUrlTask = apiService.UserInitiated.ValidateUrl(request);

var response = await Policy
    .Handle<ApiException>()
    .RetryAsync(retryCount: 5)
    .ExecuteAsync(async () =>
        await validateUrlTask);

reachable = HandleServerResponse(response);

这工作正常,除非我得到一个例外。例如,当我在我正在测试的一台服务器上收到 ApiException 时;上面的代码没有吸收错误!它只是抛出异常并使程序崩溃。我只能通过这样做使代码正常工作:

try
{
    var request = new PingUrlRequest();
    var validateUrlTask = apiService.UserInitiated.ValidateUrl(request);

    var response = await Policy
        .Handle<ApiException>()
        .RetryAsync(retryCount: 5)
        .ExecuteAsync(async () =>
            await validateUrlTask);

    reachable = HandleServerResponse(response);
}
catch (ApiException e)
{
    Mvx.Trace(e.StackTrace);
}

但这感觉不正确......如果 Handle 参数没有做任何事情,那么它有什么意义呢?我必须执行这个错误!有什么建议么?

4

1 回答 1

3

如果ApiException被抛出,则意味着 Polly 重试了 5 次以执行您的代码并且每次都失败,因此这一切都以结束ApiException并且您需要处理它。

如果 Handle 参数不做任何事情,那么它有什么意义呢?

句柄指定您的策略应适用的异常类型,以便您适当地使用它。

但是感觉不太对...

我使用与您在 2 个代码片段中使用的模式相同的模式,恕我直言。

希望这可以帮助!

于 2015-03-02T16:53:20.920 回答