使用 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 线程中执行此操作。

否则你的代码在飞行模式打开的情况下对我来说工作正常;正如预期的那样,我在处理程序中捕获了异常。异常的 HResult0x80072f30,在 MSDN page 上记录为 ERROR_WINHTTP_NO_CM_CONNECTION