,如果你有以下几种方法:异常处理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