我正在尝试通过将管理断路器 polly 策略的辅助函数发出 httpclient 请求。
我试着这样调用它
var response = clientFactory.MakeRequest(() => client.GetAsync("/"));
在客户端工厂内部,我定义了断路器策略,我正尝试使用该策略执行上述 lambda
public async Task<HttpResponseMessage> MakeRequest(Func<HttpResponseMessage> request)
{
var response = policy.ExecuteAsync(() => request.Invoke());
return response;
}
作为一个整体,我对 Lambda 相当陌生,将其作为函数传递会变得更加困惑。如何配置函数和第一行代码来执行客户端并返回 HttpResponseMessage
?我不认为Task<HttpResponseMessage>
或 Func<HttpResponseMessage>
是正确的
最佳答案
我建议您阅读一些关于 async/await(不是 lambda)的信息,因为这是理解如何实现它的关键。
https://learn.microsoft.com/en-us/dotnet/csharp/async
您正在使用异步编程,因此必须决定是要使用异步方法 MakeRequest 还是要使用同步方法。如果你想要同步(但是 - 不需要使用 ExecuteAsync。我想,有 Execute() 替代方案)简单写:
public HttpResponseMessage MakeRequest(Func<HttpResponseMessage> request)
{
var response = policy.ExecuteAsync(() => request.Invoke());
return await response;
}
如果你想要异步:
public async Task<HttpResponseMessage> MakeRequest(Func<HttpResponseMessage> request)
{
var response = policy.ExecuteAsync(() => request.Invoke());
return response;
}
public void MyMethodUsingAsync()
{
var responsePromises = MakeRequest(() => {...});
///do some job wich will be done before response is retrieved (not waiting for it); and if you need it - use await
var responseReceived = await responsePromises;
}
关于c# - 通过 Lambda Func 发出 Http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45681917/