跳转至

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。

查看固定 commit 源码 · 返回证据索引