我想尝试将一个失败的操作重试3次。
我正在使用Polly进行重试操作。
如果重试操作失败,我希望能够获取异常并再次重试2次,以此类推。
return await Policy
.Handle<CustomException>()
.RetryAsync(3, onRetryAsync: async (exception, retryCount, context) =>
{
return await runner.run(params);
});
这个函数应该返回
Task<IReadOnlyCollection<string>>
我遇到了以下错误:
异步lambda表达式转换为返回委托的任务时无法返回值
result
将包含您的方法返回的任何内容。如果它失败了太多次,它将像通常抛出异常一样。 - CrowcoderDoSomething
,因为异常来自那里。您可以只使用普通的try/catch
。 - CrowcoderDoSomething
访问。您可以根据它编写逻辑。 - CrowcoderonRetry
委托会传递Polly.Context
。而ExecuteAsync(...)
也有多个重载版本,可以将要执行的委托作为输入参数传递Polly.Context
。因此,您可以通过将数据存储在Polly.Context
字典中来共享数据。请参见https://github.com/App-vNext/Polly/wiki/Keys-And-Context-Data#using-context-for-custom-data;http://www.thepollyproject.org/2017/05/04/putting-the-context-into-polly/。通过`Polly.Context`共享数据避免了共享本地变量的问题;如果策略定义与使用不在同一范围内,则非常有用。 - mountain traveller