【发布时间】:2013-10-02 18:33:43
【问题描述】:
我希望有人能对我在使用 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);
}
}
点击调用此函数的按钮,在调试器控制台中产生以下输出,最有趣的是粗体中的输出:
开始错误请求:
System.Windows.ni.dll 中出现“System.Net.WebException”类型的异常,并且在托管/本机边界之前未处理
System.Windows.ni.dll 中出现“System.Net.WebException”类型的异常,并且在托管/本机边界之前未处理
在 mscorlib.ni.dll 中发生了“System.Net.Http.HttpRequestException”类型的第一次机会异常
“System.Net.Http.HttpRequestException”类型的异常发生在 mscorlib.ni.dll 中,并且在托管/本机边界之前未处理
发现异常:
(在这里打印出 HttpRequestException)
当然,在这种情况下,我预计会出现错误,因为我调用的 URL 是无意义的。我在这里不明白的是,当输出同时报告异常已被捕获时,为什么调试器会报告未处理异常。此外,在打印输出时,应用程序的 UI 端的响应速度会大大降低,这表明可能有问题。
这不是在使用 async 和 await 时处理异常的方法吗?我很感激任何意见!谢谢。
【问题讨论】:
-
就响应性而言,您不应在 UI 事件中运行长时间的进程。这些应该是快速且长时间运行的进程应该在另一个线程中完成。试试
BackgroundWorkermsdn.microsoft.com/en-us/library/…
标签: c# .net asynchronous windows-phone-8 async-await