gpt4 book ai didi

c# - 通过 Lambda Func 发出 Http 请求

转载 作者:行者123 更新时间:2023-11-30 16:43:05 26 4
gpt4 key购买 nike

我正在尝试通过将管理断路器 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/

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