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
一样.
归档时间: |
|
查看次数: |
17247 次 |
最近记录: |