我有几百个调用各种外部API,我希望将其包装在一个能够重试和处理超时的通用异步函数中.
- await Retry(()=>someFunctionAsync(doWorkParams,new CancellationToken()),retryCount,timeout);
解决方法
不要重新发明轮子.
Just use Polly,它完全支持您正在讨论的场景以及各种重试场景和断路器等高级模式.
这是他们的文档的异步示例:
- await Policy
- .Handle<sqlException>(ex => ex.Number == 1205)
- .Or<ArgumentException>(ex => ex.ParamName == "example")
- .RetryAsync()
- .ExecuteAsync(() => DoSomethingAsync());