我尝试接收用户的 PushNotification Channel URI(Windows 10 平台)并为某些用户应用程序生成异常This operation returned because the timeout
。
要处理任务链中的错误,我应该在链的末尾添加一个基于任务的延续并处理那里的所有错误(如此处所述https://docs.microsoft.com/en-us/windows/uwp/threading- async/asynchronous-programming-in-cpp-universal-windows-platform-apps#handling-errors-in-a-task-chain)。
所以我就这么做了。但是在我调用t.get();
系统生成Platform::COMException^
异常后,它不会在 try-catch 块中捕获。为什么?
有代码:
{
create_task(PushNotificationChannelManager::CreatePushNotificationChannelForApplicationAsync())
.then([this](PushNotificationChannel^ pnChannel)
{
// ..
// DONE: pnChannel->Uri
// ..
}, task_continuation_context::get_current_winrt_context())
.then([](task<void> t)
{
try
{
t.get(); // <<<< After exec this line app crash!
}
catch (Platform::COMException^ e)
{
OutputDebugString(L"Exception catches!");
}
});
}
有完整的异常消息:
Exception thrown at 0x00007FFD9D74A388 in GameName.exe: Microsoft C++
exception: Platform::COMException ^ at memory location 0x000000249A9FEB60.
HRESULT:0x800705B4 This operation returned because the timeout period expired.
WinRT information: This operation returned because the timeout
Visual Studio 将我扔到c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\exception
要阻止的文件中:
[[noreturn]] void _RethrowException() const
{
__ExceptionPtrRethrow(this); // <<<< here everything stoped!
}
更新:
环境:
- 视觉工作室 2017 (15.7.3)
- 基于cocos2d-x(3.16)的项目
- 项目目标平台版本 = 10.0.1493.0
- 项目平台工具集 = Visual Studio 2015 (v140)
您可以克隆 cocos2dx 项目并在 MainScene 中粘贴我之前在 onEnter 方法(或任何地方)中显示的代码。
我遇到了一种情况,我 100% 崩溃了
- 卸载之前构建的应用程序;
- 断开互联网连接;
- 构建应用程序并启动;
- 该应用程序将尝试检测 Channel URI & 将崩溃(但崩溃消息 =
WinRT information: The network is not present or not started
)。
我知道抛出该异常是正常的。但我仍然无法理解为什么当我调用t.get()
它时不会捕获异常Platform::COMException^