Closed
Description
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