event: don't exit task if future __await__ yields None

This matches the behavior of asyncio's Task implementation, where this is the equivalent of `yield Task.cont`.

I've kept regular generator tasks unaffected for now, since this might break existing usage.
This commit is contained in:
rdb 2021-02-07 12:30:15 +01:00
parent af60f8200e
commit f6b39345f7

View File

@ -585,6 +585,11 @@ do_python_task() {
return DS_done;
}
} else if (result == Py_None && PyCoro_CheckExact(_generator)) {
// Bare yield from a coroutine means to try again next frame.
Py_DECREF(result);
return DS_cont;
} else if (DtoolInstance_Check(result)) {
// We are waiting for an AsyncFuture (eg. other task) to finish.
AsyncFuture *fut = (AsyncFuture *)DtoolInstance_UPCAST(result, Dtool_AsyncFuture);