我已经设置了我的Xamarin核心项目,其中包含了我从here读取的许多提示。
我有一个简单的服务,我用来查看服务器输入的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参数没有做任何事情,那么将Handle参数放在首位是什么意思?我必须实现这个错误!有什么建议吗?
答案 0 :(得分:3)
如果抛出ApiException
,则意味着Polly重试了5次以执行您的代码并且每次都失败,因此它全部以ApiException
结束,您需要处理它。
如果Handle参数没有做任何事情,那么将Handle参数放在首位是什么意思?
句柄指定您的政策应适用的哪种类型的例外,以便您正确使用它。
但这感觉不正确......
我使用与2代码片段中相同的模式,这是好的imho。
希望这有帮助!