C++中如何捕获和处理Promise的异常?
时间: 2024-09-14 18:06:42 浏览: 47
C++11的future和promise、parkged_task使用
在C++中,Promise是一种异步编程工具,通常用于JavaScript那样的环境,但在现代库如C++17的std::experimental::coroutine2或者Boost.Variant库中也有实现。处理Promise异常的一般流程是:
1. 使用`then()`或`async()`函数:当你调用Promise的这些函数时,你可以提供一个回调函数,这个函数会在Promise解析成功时被调用。如果Promise在解析过程中抛出异常,你需要使用`catch(...)`来捕获它。
```cpp
auto promise = some_async_function();
promise.then(
[](auto result) { /* 成功处理 */ },
[](std::exception_ptr e) { // 异常处理
try {
std::rethrow_exception(e);
} catch (const std::exception& ex) {
std::cerr << "Caught exception: " << ex.what() << '\n';
}
});
```
2. 使用`await`关键字(仅限于C++20及以后):如果你在一个协程或future-like容器上使用`await`,异常会被自动传播到当前作用域的`catch`块。
```cpp
try {
auto future = some_future_promise();
await future;
} catch (std::exception& e) {
std::cerr << "Caught exception: " << e.what() << '\n';
}
```
记住,尽管C++不像JavaScript那样有全局的unhandledExceptionHandler,但最好始终处理可能出现的异常,以防程序崩溃。
阅读全文