Policy Handle<Exception> 与 Refit 包和 Xamarin 相关的问题

Policy Handle<Exception> issues in conjunction with Refit package and Xamarin

我已经根据 here.

中的许多提示设置了我的 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 参数什么都不做,那么将它放在顶部有什么意义呢?我必须实施这个错误!有什么建议吗?

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

What's the point of having the Handle parameter up top if it doesn't do anything?

Handle 指定您的策略应适用哪种类型的例外,以便您适当地使用它。

But that doesn't feel correct...

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

希望对您有所帮助!