#include <print>
#include "coro_01.h"

// Die Coroutine
// Rueckgabetyp ist immer die Coroutinen-Klasse
// Ausser der Ausgabe von Text passiert hier nichts
MyCoroutine CoTask()
{
    std::println("+++Start CoTask()");
    // Coroutine beenden, ohne einen Rueckgabewert
    // co_return definiert die Funktion fuer den Compiler
    // als eine Coroutine!!
    std::println("---Ende CoTask()");
    co_return;
}

int main()
{
    std::println("Erstelle Coroutine");
    // Coroutinen-Objekt erstellen
    // coro1 ist das Ergebnis des Aufrufs von get_return_object()
    auto coro1 = CoTask();
    // Coroutine fortsetzen, da in initial_suspend()
    // die Coroutine unterbrochen wurde
    std::println("resume()");
    coro1.resume();
    std::println("Ende main()");
}
