你有它混合了一點點。當你的方法簽名是:
public static async Task<string> httpRequest(HttpWebRequest request)
這意味着「這種方法是異步調用的,我會打電話給它,它會並承諾在未來完成迫在眉睫的回報。」
你應該改變你的方法是這樣的:
編輯
根據提出的意見修正的代碼。
public static Task<string> httpRequest(HttpWebRequest request)
{
return Task.Factory.Startnew(() = > {
return HttpWebRequest.Create("google.com")
}
}
當你的方法被標記爲異步,這意味着調用者可能會認爲這是「純粹的」異步,這意味着沒有線程執行幕後。如果你啓動了一個新的線程(就像你在這裏做的那樣,通過使用一個線程池線程),你應該明確地評論你的方法並告訴你的調用者他將啓動一個新的線程。
如果您使用.NET 4.5並可以訪問新的HttpClient類,則可以節省自己啓動新的Task。
你可以改變你的方法是這樣的:
public static async Task<string> httpRequest(HttpWebRequest request)
{
var httpClient = new HttpClient();
var response = await httpClient.GetAsync("http://www.google.com")
var stringResult = await response.Content.ReadAsStringAsync();
return stringResult;
}
我不明白這一點。什麼不工作或你在哪裏遇到麻煩?我發佈到StartNew()方法中的 –
我無法捕捉異常 – user3378283
我不是專家。但是如果'httpRequest'是'async'並不意味着你沒有自己發起任務?這個功能會爲你完成嗎? –