策略与Refit包和Xamarin </exception>一起处理<exception>问题

时间:2015-02-26 18:55:10

标签: c# xamarin.ios xamarin mvvmcross refit

我已经设置了我的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参数放在首位是什么意思?我必须实现这个错误!有什么建议吗?

1 个答案:

答案 0 :(得分:3)

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

  

如果Handle参数没有做任何事情,那么将Handle参数放在首位是什么意思?

句柄指定您的政策应适用的哪种类型的例外,以便您正确使用它。

  

但这感觉不正确......

我使用与2代码片段中相同的模式,这是好的imho。

希望这有帮助!