我从包装在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++;
}
有解决方案,还是每个呼叫都应该单独包装?
答案 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));