我希望有人能为我解决一个涉及HttpClient异步/等待异常处理的问题。我写了一些代码来说明,并在Windows Phone 8设备和模拟器上执行:
private async void SearchButton_Click(object sender, EventArgs e)
{
try
{
HttpClient client = new HttpClient();
System.Diagnostics.Debug.WriteLine("BEGIN FAULTY REQUEST:");
string response = await client.GetStringAsync("http://www.ajshdgasjhdgajdhgasjhdgasjdhgasjdhgas.tk/");
System.Diagnostics.Debug.WriteLine("SUCCESS:");
System.Diagnostics.Debug.WriteLine(response);
}
catch (Exception exception)
{
System.Diagnostics.Debug.WriteLine("CAUGHT EXCEPTION:");
System.Diagnostics.Debug.WriteLine(exception);
}
}
点击调用此函数的按钮,将在调试器控制台中生成以下输出,最有趣的部分是粗体字体:
BEGIN FAULTY REQUEST:
类型为“System.Net.WebException”的异常在“System.Windows.ni.dll”中发生,并且在托管/本机边界之前未处理
类型为“System.Net.WebException”的异常在“System.Windows.ni.dll”中发生,并且在托管/本机边界之前未处理
类型为“System.Net.Http.HttpRequestException”的第一次机会异常在“mscorlib.ni.dll”中发生
类型为“System.Net.Http.HttpRequestException”的异常在“mscorlib.ni.dll”中发生,并且在托管/本机边界之前未处理
CAUGHT EXCEPTION:
(这里打印出HttpRequestException)
当然,在这种情况下,我预计会出现错误,因为我正在调用无意义的URL。我不理解的是,为什么调试器报告异常未处理,而输出同时报告异常已被捕获。此外,在输出被打印时,应用程序的UI端变得不那么响应,这表明可能有问题。
在使用异步和等待时,这不是处理异常的方法吗?感谢任何帮助!谢谢。
BackgroundWorker
http://msdn.microsoft.com/en-us/library/System.ComponentModel.BackgroundWorker.aspx - Harrison