有没有一种方法可以从一个方法多次调用不同的http请求,直到获得答案?

时间:2019-01-10 11:34:02

标签: c# httprequest

我从包装在C#方法(库)中的一项Web服务中获得了webAPI。 作为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 :(得分:0)

您应该查看重试模式,它适合您的需求:

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

答案 1 :(得分:0)

如果要使用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));