gpt4 book ai didi

c# - 无法配置 Flurl 以使用 Polly PolicyHandler

转载 作者:行者123 更新时间:2023-12-05 06:01:02 25 4
gpt4 key购买 nike

我有一个使用依赖注入(inject)的 .NET HostedService。我的客户端工厂创建了一个策略处理程序,在 DI 中,我将 Flurl 配置为使用该工厂。在 Debug模式下,我可以看到客户端是由使用 TransientFaultPolicyHandler 的工厂生成的,但我没有得到任何重试。

Program.cs

services.AddSingleton<IFlurlClientFactory, PerBaseUrlFlurlClientFactory>();

FlurlHttp.Configure(settings =>
{
settings.HttpClientFactory = new PollyHttpClientFactory();
});

PollyHttpClientFactory

public class PollyHttpClientFactory : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler()
{
return new TransientFaultPolicyHandler
{
InnerHandler = base.CreateMessageHandler()
};
}

public override HttpClient CreateHttpClient(HttpMessageHandler handler)
{
return new HttpClient(CreateMessageHandler());
}
}

TransientFaultPolicyHandler.cs

public class TransientFaultPolicyHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return Policy.Handle<FlurlHttpException>()
.WaitAndRetryAsync(3, attempt =>
{
var nextAttempt = TimeSpan.FromSeconds(Math.Pow(2, attempt));
//$"Retry attempt {attempt} to make request. Next try on {nextAttempt.TotalSeconds} seconds.";
return nextAttempt;
})
.ExecuteAsync(token => base.SendAsync(request, token), cancellationToken);
}
}

最佳答案

这确实有效。我使用的是一个我不太熟悉的 IDE,因此看不到它被调用。

关于c# - 无法配置 Flurl 以使用 Polly PolicyHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67359447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com