gpt4 book ai didi

c# - 从 Web API 同步调用外部 API

转载 作者:行者123 更新时间:2023-11-30 19:25:33 26 4
gpt4 key购买 nike

我需要从我的 Web API 2 Controller 调用外部 api,类似于此处的要求:

Calling external HTTP service using HttpClient from a Web API Action

但是,上述解决方案需要将 async 关键字添加到我的 api 方法的 GET 调用中,从而使我的调用异步。我更喜欢用同步方法向我的 API 的客户端提供,但仍然能够从我自己的方法调用外部 api(并且需要它在我的 api 返回之前返回)。有办法做到这一点吗?

最佳答案

阻塞 async操作可能很危险。它会损害性能并可能导致死锁(更多内容在 Should I expose synchronous wrappers for asynchronous methods? 中)

但如果您确定那是您想要做的,IMO 最好使用 GetAwaiter().GetResult() :

using (HttpClient httpClient = new HttpClient())
{
var response = httpClient.GetAsync(_endpoint).GetAwaiter().GetResult();
var result = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
// Do stuff...
}

无论是Task都是一样的或 Task<T> , 这是同一个电话 await转换为(尽管 await 任务已经完成)和 Task.Result (或 Task.Wait )将所有异常包装在 AggregateException 中同时 GetAwaiter().GetResult()仅抛出第一个 Exception作为await

关于c# - 从 Web API 同步调用外部 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28551521/

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