开发者社区> 问答> 正文

在下面这个 demo 中,unhandled_exception 方法的作用是什么?

在下面这个 demo 中,unhandled_exception 方法的作用是什么?

#include <iostream>
#include <coroutine>

template <bool READY>
struct Awaiter {
bool await_ready() noexcept {
std::cout << "await_ready: " << READY << std::endl;
return READY;
}
void await_resume() noexcept {
std::cout << "await_resume" << std::endl;
}
void await_suspend(std::coroutine_handle<>) noexcept {
std::cout << "await_suspend" << std::endl;
}
};

struct TaskPromise {
struct promise_type {
TaskPromise get_return_object() {
std::cout << "get_return_object" << std::endl;
return TaskPromise{std::coroutine_handle<promise_type>::from_promise(*this)};
}
Awaiter<true> initial_suspend() noexcept {
std::cout << "initial_suspend" << std::endl;
return {};
}
Awaiter<true> final_suspend() noexcept {
std::cout << "final_suspend" << std::endl;
return {};
}
void unhandled_exception() {
std::cout << "unhandled_exception" << std::endl;
}
void return_void() noexcept {
std::cout << "return_void" << std::endl;
}
};

void resume() {
std::cout << "resume" << std::endl;
handle.resume();
}

std::coroutine_handle<promise_type> handle;
};

TaskPromise task_func() {
std::cout << "task first run" << std::endl;
co_await Awaiter<false>{};
std::cout << "task resume" << std::endl;
}

int main() {
auto promise = task_func();
promise.resume();

return 0;
}

展开
收起
夹心789 2024-05-29 17:01:45 28 0
1 条回答
写回答
取消 提交回答
  • unhandled_exception 方法是协程承诺(Promise)类型中的一个回调函数,用于处理协程执行过程中未捕获的异常。当协程中抛出了未被捕获的异常时,编译器会自动调用该方法。在这个 demo 中,unhandled_exception 方法只是简单地打印了一条错误信息。

    2024-05-29 20:31:53
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载