async&#x2F;await are a form of <i>stackless coroutines</i> (or <i>stackless delimited continuations</i> although that term is rarely, if ever used). They&#x27;re a limited form of delimited continuations, and are mostly used as a compromise when implementing full coroutines is hard (or not wanted for some reason). Clojure&#x27;s core.async&#x27;s go blocks are also stackless coroutines. Basically, they&#x27;re delimited continuations that only allow suspension (&quot;shift&quot;) at the topmost stack frame of the continuation, and don&#x27;t allow suspending at deeper stack frames.