我打電話使用的HttpClient從.Net框架4.5調用使用的HttpClient從Web API操作
的示例代碼如下運行一個ASP.Net MVC 4的Web API項目內外部服務(外部HTTP服務忽略返回值,因爲這是示例代碼來測試調用外部服務):
public class ValuesController : ApiController
{
static string _address = "http://api.worldbank.org/countries?format=json";
private string result;
// GET api/values
public IEnumerable<string> Get()
{
GetResponse();
return new string[] { result, "value2" };
}
private async void GetResponse()
{
var client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(_address);
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsStringAsync();
}
}
而在私有方法確實工作,我有問題的代碼是控制器的get()調用的GetResponse()但它並不等待結果,而是立即執行返回結果= null。
我一直在使用一個簡單的同步調用與Web客戶端也試過如下:
// GET api/values
public IEnumerable<string> Get()
{
//GetResponse();
var client = new WebClient();
result = client.DownloadString(_address);
return new string[] { result, "value2" };
}
工作正常。
我在做什麼錯?爲什麼Get()不等待異步樣本中的私有方法完成?
你不需要用await調用GetResponse()嗎?否則,不會等待該方法完成...並且您的控制器操作將直接完成,結果仍然爲空。 – jishi
是的,但我沒有意識到我可以將Get()標記爲使用await所需的async。 – Redeemed1