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 个代码片段中使用的模式相同,恕我直言。
希望对您有所帮助!
我已经根据 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 个代码片段中使用的模式相同,恕我直言。
希望对您有所帮助!