ev-drogon-coroutine-filter-002¶
| 字段 | 值 |
|---|---|
| 项目 | drogonframework/drogon |
| 固定 commit | 3aae769cc405 |
| 路径 | lib/inc/drogon/HttpFilter.h |
| 行段 | L104-L118 |
| 特性 | 协程 |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-25 |
| 测试代码 | 否 |
| 发现方式 | tree-sitter |
用法¶
在返回 Task<> 的 lambda 协程中用 try/catch 包裹 co_await,异常路径显式 co_return
为什么典型¶
协程不会自动把异常交给调用方;这里在协程体内捕获 doFilter 的异常并转到统一错误处理,再用 co_return 结束,展示了协程与既有异常处理路径的衔接方式。
摘录¶
HttpResponsePtr resp;
try
{
resp = co_await doFilter(req);
}
catch (const std::exception &ex)
{
internal::handleException(ex, req, std::move(fcb));
co_return;
}
catch (...)
{
LOG_ERROR << "Exception not derived from std::exception";
co_return;
}
备注¶
生产路径;两个 catch 分支都显式 co_return,避免异常穿过 promise 的 unhandled_exception。