# \[Pitch #3\] Async Let

**URL:** <https://forums.swift.org/t/pitch-3-async-let/48336>\
**Category:** Pitches\
**Tags:** concurrency\
**Created:** [May 13, 2021, 10:57pm UTC](https://forums.swift.org/t/pitch-3-async-let/48336 "2021-05-13T22:57:03Z")\
**Posts on this page:** 1\
**Showing post:** 6

<div class="post-metadata">

**Author:** ![ktoso](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/ktoso/32/44526_2.png) [@ktoso](https://forums.swift.org/u/ktoso)\
**Post date:** [May 14, 2021, 1:06am UTC](https://forums.swift.org/t/pitch-3-async-let/48336/6 "2021-05-14T01:06:39Z")

</div>

I answered a bit too quickly here, let me revise my post a bit.

> [@omochimetaru](#):
>
> Did `TaskGroup.spawn` change to `TaskGroup.async` from this last review which still haven't officially concluded? ↓

Right yeah this is a change after the 2nd review of the structured concurrency proposal indeed.  
It didn't yet get a proper summary writeup but as Ben mentions, we are working on revisions based on the review:

> [@SE-0304 (2nd review): Structured Concurrency](https://forums.swift.org/t/se-0304-2nd-review-structured-concurrency/47217/122):
>
> The proposal authors are making some adjustments as the result of feedback – the intention is to put it into a 3rd review shortly.

You can already view all the changes for the 3rd review of structured concurrency over here: [[Struct Concurrency] Update for 3rd review by ktoso · Pull Request #1345 · apple/swift-evolution · GitHub](https://github.com/apple/swift-evolution/pull/1345/files#diff-6e3f26a7c1e2c41a13bcf34ef4c7d84625339b2898702f5e0bed0d6e05f1a778R1475)

--

So, why `async`?

The spawn word came up because of the analogy with "spawning threads" and it read quite nicely with `group.spawn`.

Sadly, it did not read well in other contexts. Most notably, `spawn let` was not a spelling we felt comfortable with, and the previous spelling of `async let` really looks much more awesome and was met with some enthusiasm in prior reviews.

Because of that, I and the other proposal authors (@Douglas_Gregor @John_McCall and @Joe_Groff ) would want to keep the `async let` spelling. We also introduce the new, and very important, `async {}` operation in the 3rd structured concurrency review ([[Struct Concurrency] Update for 3rd review by ktoso · Pull Request #1345 · apple/swift-evolution · GitHub](https://github.com/apple/swift-evolution/pull/1345/files#diff-6e3f26a7c1e2c41a13bcf34ef4c7d84625339b2898702f5e0bed0d6e05f1a778R1475)), which makes for an odd situation:

- `group.spawn` - only the group uses the spawn word
- `async let`
- `async {}`
- `detach`

Because we have a mix of different words to mean creating a task. Given that spawn is the odd one here, we decided that we can stick to using the word `async` consistently to mean creating a child task, this way we arrive at a consistent API in all contexts:

- `group.async { }`
- `async let`
- `async {}`
- and `asyncDetached {}`

We can say that "`async` creates async tasks" and that's always correct. Specifically, the group's async and `async let` create _child_ async tasks. And the other APIs create async tasks which are not child tasks. Overall we feel this is a simple rule to follow, and does not introduce yet another new word into the swift concurrency vocabulary.

Hope this helps!

---

_[View the full topic](https://forums.swift.org/t/pitch-3-async-let/48336)._
