Проблемы с обработкой политики<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.

Надеюсь это поможет!

Другие вопросы по тегам