by Guest » 16 Jan 2025, 04:44
AFAICT gibt es in C++20 oder C++23 keine integrierte Möglichkeit, das Versprechen oder Handle für die Coroutine, die im aktuellen Thread ausgeführt wird, global abzufragen. Jede der Funktionen, mit denen Sie eine Coroutine zurückgeben können, um deren Ausführung auszulösen, z. B. initial_suspend, final_suspend,wait_suspend usw. würden wissen, welche Coroutine gerade ausgeführt wird, und könnten einen thread_local auf das coroutine_handle setzen, das sie zurückgeben, bevor sie zurückkehren. Reicht das aus oder gibt es noch mehr Fälle, über die man sich Sorgen machen muss? Dabei wird davon ausgegangen, dass die Leute im typischen Fall co_await für ihre Aufgabentypen ausführen und nicht manuell ihre eigene Schleife ausführen, die handle.resume() immer wieder aufruft (und wenn es einen Executor/Execution-Agent gäbe). Umschalten zwischen gespeicherten Coroutinen der obersten Ebene, die mit dem Schema zusammenarbeiten würden).
AFAICT gibt es in C++20 oder C++23 keine integrierte Möglichkeit, das Versprechen oder Handle für die Coroutine, die im aktuellen Thread ausgeführt wird, global abzufragen. Jede der Funktionen, mit denen Sie eine Coroutine zurückgeben können, um deren Ausführung auszulösen, z. B. initial_suspend, final_suspend,wait_suspend usw. würden wissen, welche Coroutine gerade ausgeführt wird, und könnten einen thread_local auf das coroutine_handle setzen, das sie zurückgeben, bevor sie zurückkehren. Reicht das aus oder gibt es noch mehr Fälle, über die man sich Sorgen machen muss? Dabei wird davon ausgegangen, dass die Leute im typischen Fall co_await für ihre Aufgabentypen ausführen und nicht manuell ihre eigene Schleife ausführen, die handle.resume() immer wieder aufruft (und wenn es einen Executor/Execution-Agent gäbe). Umschalten zwischen gespeicherten Coroutinen der obersten Ebene, die mit dem Schema zusammenarbeiten würden).