给出以下测试程序:

#include <asio.hpp>
#include <cassert>

int main()
{
    asio::io_service ios1, ios2;
    asio::io_service::strand s2(ios2);

    auto test_func = wrap(s2, [&] {
        assert(s2.running_in_this_thread());
    });

    auto wrap_test_func = wrap(ios1, test_func);

    wrap_test_func();

    ios1.run_one();
    ios2.run_one();

}

我的理解是该程序不应该声明。
wrap_test_func包装在io_service ios1中。它包装的功能包装在strand s2(使用ios2)中。

据我了解,调用wrap_test_func应该等效于dispatch(ios1, test_func),然后应在s2中分派(dispatch)lambda)。

但是,看起来好像wrap已经打开了内部包装。

这是预期的行为吗?

最佳答案

原来那是我的误会。

这是Asio作者的回复拷贝:

10-06 01:54