Asynchronous 如何制作C++;异步编程更线性(协同程序?)

Asynchronous 如何制作C++;异步编程更线性(协同程序?),asynchronous,c++14,coroutine,boost-coroutine,boost-coroutine2,Asynchronous,C++14,Coroutine,Boost Coroutine,Boost Coroutine2,在C++14中,我想构建一种机制,以“顺序”的方式使用异步API,使用单线程 更明确地说,我想实现如下目标: // Transform AsyncOp1 into SyncOp1 // SyncOp1 returns after AsyncOp1 completes // but yields execution to another script void SyncOp1() { AsyncOp1( [](){ // async op completion handler

在C++14中,我想构建一种机制,以“顺序”的方式使用异步API,使用单线程

更明确地说,我想实现如下目标:

// Transform AsyncOp1 into SyncOp1
// SyncOp1 returns after AsyncOp1 completes
// but yields execution to another script
void SyncOp1()
{
    AsyncOp1( [](){ // async op completion handler
        // TODO: yield control
    } );
    // TODO: control returns here after AsyncOp1 completed
}

... // similar code for SyncOp2, SyncOp3, SyncOp4,...

void Script1()
{
    SyncOp1(); 
    SyncOp2(); // SyncOp2 starts only after AsyncOp1 has completed
    ...
}

void Script2()
{
    SyncOp3(); 
    SyncOp4(); // SyncOp4 starts only after AsyncOp3 has completed
    ...
}

int main()
{
    ...
    Spawn( Script1 );
    Spawn( Script2 ); // Script1 and Script2 runs in parallel
    ...
    // TODO some machinery here :-)
    ...
    return 0;
}
我的程序应该一次运行多个脚本,每个脚本都应该是一系列标准函数调用(
SyncOpX
)。脚本可以并行运行,因为
SyncOpX
是通过异步函数实现的(即,在i/O完成时启动i/O操作、返回和调用回调的函数)

当然,使用多个线程很容易找到解决方案(
Spawn
创建一个新线程,并
SynchOpX
等待异步调用的结果)。但是我正在寻找一个单线程解决方案

我认为可以以某种方式使用协同程序。由于当前的标准是
C++14
,是否有一种使用
boost协同程序的解决方案?或者使用任何其他[便携式]机制

顺便说一句:我正在使用
boost::asio
进行异步I/O


谢谢。

< P>如果你已经使用了BooS.Asio,你应该考虑它的SPAWN()和PrimdId上下文-/P> 附加地,你可以考虑Boo.Fix:

Boost.Fiber的主要优点之一是能够使用异步操作来提高效率,同时将调用代码结构化为操作是同步的


您是否考虑使用类似于或的库?@j2ko我已经在为I/O异步事件使用boost::asio。我所要寻找的是一种C++机制,使异步编程更为连续(W/O线程)。