Есть ли способ вызывать разные http-запросы из одного метода несколько раз, пока мы не получим ответ? - PullRequest
0 голосов
/ 10 января 2019

У меня есть webAPI от одного веб-сервиса, который обернут в C # -методы (библиотека). В качестве http-запросов (GET) они могут возвращать ошибку при первом вызове, но возвращают ответ во второй или третий раз.

Поэтому я хочу создать метод, который будет вызывать любой переданный метод с параметрами и несколько раз попытаться получить ответ.

Примерно так:

        bool trySuccess = false;
        int tryCount = 0;
        while (trySuccess == false && tryCount < 6)
        {
            try
            {
                newEvents = webAPI.GetNewEvents(authToken, uniqueId);
                trySuccess = true;
            }
            catch (Exception ex)
            {
                Log("fail", tryCount);
            }
            tryCount++;
        }

Есть ли решение или каждый вызов должен быть упакован отдельно?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Если бы вы использовали Polly , фантастическую библиотеку для обработки переходных сбоев, вы могли бы заменить весь свой код на что-то вроде этого:

var newEvent = Policy.Handle<Exception>()
                     .Retry(6)
                     .Execute(() => webAPI.GetNewEvents(authToken, uniqueId));

(Возможно, это не на 100% правильно, поскольку у меня нет Visual Studio, доступной для тестирования прямо сейчас, но она должна быть достаточно близко, чтобы вы могли добраться туда, куда вам нужно.)

Если вы все еще хотите, чтобы ваше сообщение было записано при сбоях, оно выглядело бы так:

var newEvent = Policy.Handle<Exception>((exception, retryCount, context) => 
                                        Log("fail", retryCount))
                     .Retry(6)
                     .Execute(() => webAPI.GetNewEvents(authToken, uniqueId));
0 голосов
/ 10 января 2019

Вы должны посмотреть шаблон Retry, он соответствует тому, что вы хотите:

https://docs.microsoft.com/en-us/azure/architecture/patterns/retry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...