繁体   English   中英

从 Web API 同步调用外部 api

[英]Call external api from Web API synchronously

我需要从我的 Web API 2 控制器调用外部 api,类似于这里的要求:

使用 HttpClient 从 Web API 操作调用外部 HTTP 服务

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

阻塞async操作可能很危险。 它会损害性能并可能导致死锁(更多信息请参见我应该为异步方法公开同步包装器吗?

但是,如果您确定这就是您想要做的,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 )在GetAwaiter().GetResult()时将任何异常包装在AggregateException GetAwaiter().GetResult()await一样只抛出第一个Exception

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM