使用 HttpClient 进行异步下载:找不到与此错误代码关联的文本
Asynchronous download with HttpClient: The text associated with this error code could not be found
我打算使用下面的代码来下载一个文件。它在 WIFI 可用时工作;但是当没有 Wifi 时,我希望捕获 previousTask.get()
中引发的异常。不幸的是,我的代码中的 catch
似乎没有捕捉到异常。顺便说一句,例外是 HRESULT:0x80072F30 The text associated with this error code could not be found.
。我是否遗漏了异常无法捕获之类的东西?
auto httpClient = ref new HttpClient();
auto get_operation = httpClient->GetAsync(ref new Uri(url), HttpCompletionOption::ResponseContentRead);
get_operation->Progress = progressHandler;
auto response = create_task(get_operation).then([](task<HttpResponseMessage^> previousTask)
{
try
{
return previousTask.get();
}
catch (Exception^ ex)
{
// Some how this does not catch
OutputDebugString(("Exception: " + ex->Message)->Data());
return (HttpResponseMessage^)nullptr;
}
}).get();
// At this point, I expect either a fully read response or response=nullptr
// Code to write to file is omitted
EDIT: ~~我测试了微软官方的HttpClient sample,它显然使用了类似的代码。显然,当没有网络连接时,该应用程序会发生同样的崩溃。这样一来就确认了缺陷在OS这边,已经无能为力了~~
编辑:事实证明我认为没有捕获到异常,因为 Visual Studio 弹出一个对话框,我认为这实际上意味着异常使应用程序崩溃即当它不是通过 VS 启动时。我仔细阅读了弹出消息并意识到 VS 会在每次抛出异常时提示,除非配置为不这样做;按对话框上的 [Continue] 按钮转到 catch
子句。从“开始”菜单启动应用程序没有问题。
如果此代码是从 UI 线程调用的,则从该代码的最后一行删除 get()
调用。您不能在 UI 线程中执行此操作。
否则你的代码在飞行模式打开的情况下对我来说工作正常;正如预期的那样,我在处理程序中捕获了异常。异常的 HResult
为 0x80072f30
,在 MSDN page 上记录为 ERROR_WINHTTP_NO_CM_CONNECTION
我打算使用下面的代码来下载一个文件。它在 WIFI 可用时工作;但是当没有 Wifi 时,我希望捕获 previousTask.get()
中引发的异常。不幸的是,我的代码中的 catch
似乎没有捕捉到异常。顺便说一句,例外是 HRESULT:0x80072F30 The text associated with this error code could not be found.
。我是否遗漏了异常无法捕获之类的东西?
auto httpClient = ref new HttpClient();
auto get_operation = httpClient->GetAsync(ref new Uri(url), HttpCompletionOption::ResponseContentRead);
get_operation->Progress = progressHandler;
auto response = create_task(get_operation).then([](task<HttpResponseMessage^> previousTask)
{
try
{
return previousTask.get();
}
catch (Exception^ ex)
{
// Some how this does not catch
OutputDebugString(("Exception: " + ex->Message)->Data());
return (HttpResponseMessage^)nullptr;
}
}).get();
// At this point, I expect either a fully read response or response=nullptr
// Code to write to file is omitted
EDIT: ~~我测试了微软官方的HttpClient sample,它显然使用了类似的代码。显然,当没有网络连接时,该应用程序会发生同样的崩溃。这样一来就确认了缺陷在OS这边,已经无能为力了~~
编辑:事实证明我认为没有捕获到异常,因为 Visual Studio 弹出一个对话框,我认为这实际上意味着异常使应用程序崩溃即当它不是通过 VS 启动时。我仔细阅读了弹出消息并意识到 VS 会在每次抛出异常时提示,除非配置为不这样做;按对话框上的 [Continue] 按钮转到 catch
子句。从“开始”菜单启动应用程序没有问题。
如果此代码是从 UI 线程调用的,则从该代码的最后一行删除 get()
调用。您不能在 UI 线程中执行此操作。
否则你的代码在飞行模式打开的情况下对我来说工作正常;正如预期的那样,我在处理程序中捕获了异常。异常的 HResult
为 0x80072f30
,在 MSDN page 上记录为 ERROR_WINHTTP_NO_CM_CONNECTION