我有几百个调用各种外部API,我希望将其包装在一个能够重试和处理超时的通用异步函数中.
@H_301_2@基本上,我认为我需要实现类似这个函数调用的东西:
await Retry(()=>someFunctionAsync(doWorkParams,new CancellationToken()),retryCount,timeout);@H_301_2@如何定义此类重试功能?另外,我如何从同步代码中调用此功能,因为我的调用大量存在于同步方法中?
解决方法
不要重新发明轮子.
Just use Polly,它完全支持您正在讨论的场景以及各种重试场景和断路器等高级模式.
@H_301_2@这是他们的文档的异步示例:
await Policy .Handle<sqlException>(ex => ex.Number == 1205) .Or<ArgumentException>(ex => ex.ParamName == "example") .RetryAsync() .ExecuteAsync(() => DoSomethingAsync());