如何抛出一个自定义异常在波利率限制超过率?



我有一个定义了某些限制的API。因为我使用了Polly c#库来限制对API的调用。以下是我使用的策略。

var _rateLimitPolicy = Policy.RateLimitAsync(10,TimeSpan.FromSeconds(1), 5);
var _retryPolicy = Policy
.Handle<RateLimitRejectedException>(e => e.RetryAfter > TimeSpan.Zero)
.WaitAndRetryAsync(
retryCount: 3,
sleepDurationProvider: (i, e, ctx) =>
{
var rle = (RateLimitRejectedException)e;
return rle.RetryAfter;
},
onRetryAsync: (e, ts, i, ctx) => Task.CompletedTask
);
_wrappedPolicies = Policy.WrapAsync(_retryPolicy, _rateLimitPolicy);

目前,一旦超过重试限制3,它就会抛出RateLimitRejectedException。如果超出重试限制,我想抛出一个自定义错误。有人知道怎么做吗?

当你想执行_wrappedPolicies
时,你可以调用ExecuteAsyncExecuteAndCaptureAsync方法。

  • Former在重试时抛出原始异常
  • 后者在失败和成功的情况下捕获PolicyResult中的结果
PolicyResult policyExecutionResult = await _wrappedPolicies.ExecuteAndCaptureAsync(...);

在这个结果对象上有一个名为FinalException的属性。您可以检查它,并根据评估结果抛出自定义异常

if (policyExecutionResult.FinalExecption is RateLimitRejectedException)
throw new CustomException(...);

如果你想抛出一个异常,那么使用System。if语句的异常

:

if(retryLimit>3)
{
throw new System.Exception("Retry Limit exceeded 3.");
}

如果您不希望用抛出的异常中断进程,您可以使用try{}catch(Exception e){}too

最新更新