may*_*lle 2 c# asynchronous web-services async-await asp.net-web-api
我需要从我的Web API 2控制器调用外部api,类似于此处的要求:
使用Web API Action中的HttpClient调用外部HTTP服务
但是,上面的解决方案需要将async关键字添加到我的api方法的GET调用中,从而使我的调用异步.我更喜欢用同步方法呈现我的API的客户端,但仍然可以从我自己调用外部api(并且需要在我的api返回之前返回).有没有办法做到这一点?
阻止async操作可能是危险的.它会损害性能并可能导致死锁(更多内容我应该为异步方法公开同步包装器吗?)
但如果您确定这是您想要做的,那么使用它会更好GetAwaiter().GetResult()!
using (HttpClient httpClient = new HttpClient())
{
var response = httpClient.GetAsync(_endpoint).GetAwaiter().GetResult();
var result = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
// Do stuff...
}
Run Code Online (Sandbox Code Playgroud)
这是同样的它是否是一个Task或者Task<T>,这是相同的调用await转换为(虽然await任务已经完成)和Task.Result(或Task.Wait)包装中的任何异常AggregateException,而GetAwaiter().GetResult()只抛出了第一个Exception为await一样.