【发布时间】:2022-10-02 05:50:31
【问题描述】:
我试图在重试之前记录一些东西。在重试发生之前记录信息的正确语法是什么?
这是一个类似于我的实际代码的示例代码:
var policy = Polly.Policy
.Handle<SomeExceptionType>()
.WaitAndRetryAsync(
retryCount: this.maxRetryCount,
sleepDurationProvider: (_, e, context) =>
{
var waitTimeSpan = TimeSpan.FromSeconds(1);
if (e != null && e is SomeExceptionType someException)
{
var retryAfterFromException = someException.Headers?.RetryAfter.Delta;
if (retryAfterFromException > TimeSpan.Zero)
{
waitTimeSpan = retryAfterFromException.GetValueOrDefault();
}
}
return waitTimeSpan;
},
onRetryAsync: (e, timeSpan, retryCount) =>
this.logger.LogInfo($\"Request failed with {result.Result.StatusCode}. Waiting {timeSpan} before next retry. Retry attempt {retryCount}\"));
这会产生语法错误,因为 LogInfo 返回 void。什么是正确的日志记录方法?
-
请注意,如果在请求期间抛出了异常,则此
result.Result.StatusCode代码可能会抛出NullReferenceException。请使用null-conditional operator:result?.Result?.StatusCode
标签: c# polly retry-logic ilogger