[英]C# Tasks get result or catch exception
我有:
public static async Task<string> httpRequest(HttpWebRequest request)
我想這樣做:
string rez1;
static void test()
{
Task.Factory.StartNew(() => {
//How can I get result like rez1= httpRequest((HttpWebRequest)HttpWebRequest.Create("google.com")));
//or catch WebException here.
});
}
我該怎么做? 謝謝
你把它混淆了一點。 當您的方法簽名是:
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類,則可以保存自己啟動新任務。
您可以將方法更改為如下所示:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.