Проблемы с обработкой политики<Exception> в сочетании с пакетом Refit и Xamarin
Я настроил свой основной проект Xamarin с большим количеством советов, которые я прочитал здесь.
У меня есть простой сервис, который я использую, чтобы проверить, является ли введенный URL для сервера действительным: IValidateUrlService
Я пытаюсь использовать библиотеку Полли, чтобы сделать что-то вроде этого:
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 наверху, если он ничего не делает? Я должен реализовать это неправильно! Какие-либо предложения?
1 ответ
Если ApiException
Это означает, что Полли 5 раз повторила попытку выполнить ваш код и каждый раз терпела неудачу, поэтому все закончилось ApiException
и вам нужно справиться с этим.
Какой смысл иметь параметр Handle наверху, если он ничего не делает?
Handle указывает, к какому типу исключений должна применяться ваша политика, чтобы вы использовали ее соответствующим образом.
Но это не правильно...
Я использую тот же шаблон, что и в фрагменте кода 2, и это нормально, imho.
Надеюсь это поможет!