8000 Early co_returns do not resume the caller · Issue #24 · qcoro/qcoro · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Early co_returns do not resume the caller #24
Closed
@rgriebl

Description

@rgriebl

Maybe I'm not understanding correctly how coroutines work, but I think the following example should work for both cases: returning early and awaited from testReturn.
What I'm seeing (gcc 11 and MSVC 2019) is that testImmediate just hangs and never returns from its co_await

static QCoro::Task<bool> testReturn(bool immediate)
{
    qWarning() << "Running testReturn(immediate:" << immediate << ")";
    if (immediate) {
        co_return true;
    } else {
        QTimer t;
        t.start(100);
        co_await(t);
        co_return true;
    }
}

static QCoro::Task<> testImmediate()
{
    qWarning() << "Starting Immediate...";
    bool b = co_await testReturn(true);
    qWarning() << "Immediate result:" << b;
}

static QCoro::Task<> testDelayed()
{
    qWarning() << "Starting Delayed...";
    bool b = co_await testReturn(false);
    qWarning() << "Delayed result:" << b;
}

int main(int argc, char **argv)
{
    QCoreApplication a(argc, argv);
    QMetaObject::invokeMethod(qApp, []{ testImmediate(); }, Qt::QueuedConnection);
    QMetaObject::invokeMethod(qApp, []{ testDelayed(); }, Qt::QueuedConnection);
    return a.exec();
}

Output:

Starting Immediate...
Running testReturn(immediate: true )
Starting Delayed...
Running testReturn(immediate: false )
Delayed result: true

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0