簡體   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