,如果你有以下幾種方法:異常處理httpclient.GetStringAsync(URL)異步API調用
public async Task<string> GetTAsync(url)
{
return await httpClient.GetStringAsync(url);
}
public async Task<List<string>> Get(){
var task1 = GetTAsync(url1);
var task2 = GetTAsync(url2);
await Task.WhenAll(new Task[]{task1, task2});
// but this may through if any of the tasks fail.
//process both result
}
我如何處理異常?我查看了HttpClient.GetStringAsync(url)方法的文檔,它可能拋出的唯一異常似乎是ArgumentNullException。但至少我遇到了一次禁止的錯誤,並希望處理所有可能的例外情況。但我找不到任何特定的例外。我應該在這裏捕捉Exception exception嗎?如果它更具體,我將不勝感激。 請幫忙,它真的很重要。
Catch'Exception',然後檢查它是否屬於'AggregateException'類型。如果是這樣,'AggregateException.InnerExceptions'使您可以訪問單個任務可能拋出的異常。注意'AggregateException'可以嵌套,你可以使用'AggregateException.Flatten'來解決這個問題。或者,在等待Task.WhenAll後,您可以訪問task.Result或在任務上執行await task,它將重新拋出該任務的異常。相關:http://stackoverflow.com/q/24623120/1768303。 – Noseratio
是的,我可以捕捉聚合異常,並可以扁平化,但我想要的是特定的異常httpclient.GetStringAsync()方法可能會拋出。在查看其他帖子時,有人寫道HttpRequestException是將拋出的異常。到目前爲止,我無法確認它。 – user3818435
你爲什麼不試試自己?你會得到'System.Net.Http.HttpRequestException'和相關的錯誤信息,例如「響應狀態碼不表示成功:404(未找到)。」請記住,類似於'404'的狀態會爲'HttpClient.GetStringAsync'引發錯誤,但不會引發'HttpClient.GetAsync'錯誤。 – Noseratio