[英]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.