# SE-0296: async/await

**URL:** <https://forums.swift.org/t/se-0296-async-await/42605>\
**Category:** Proposal Reviews\
**Created:** [December 8, 2020, 6:23pm UTC](https://forums.swift.org/t/se-0296-async-await/42605 "2020-12-08T18:23:26Z")\
**Posts on this page:** 1\
**Showing post:** 25

<div class="post-metadata">

**Author:** ![Jumhyn](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/jumhyn/32/3891_2.png) [@Jumhyn](https://forums.swift.org/u/Jumhyn)\
**Post date:** [December 9, 2020, 9:44pm UTC](https://forums.swift.org/t/se-0296-async-await/42605/25 "2020-12-09T21:44:46Z")

</div>

> [@Nevin](#):
>
> However in the proposal text, an `async` function can only be called from within another `async` function. And when such a call is made, if the inner function suspends, then the outer function _also_ suspends.
> 
> So what code keeps running on that thread?
> 
> The proposal does not explain that.

IIUC (someone please correct me if I've misunderstood), this is essentially an implementation detail of the underlying operating system/scheduler/runtime. When a suspension point is reached, Swift will yield the thread back to the scheduler, and at some point in the future the rest of the `async` function will be scheduled to run.

In UIKit-land, this would (I assume) mean handing control back to the main `RunLoop` so that it can continue to service UI events until the rest of the `async` task is ready to run.

As for the chicken-egg problem with `async` function calls, there have been a couple solutions [mentioned](https://forums.swift.org/t/pitch-2-async-await/42420/21) which will allow non-`async` functions to spawn `async` execution contexts.

---

_[View the full topic](https://forums.swift.org/t/se-0296-async-await/42605)._
