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