Python added the async/await constructs in 3.5 in 2015. The Javascript community made steps towards it for a bazzillion years and finally added a very similar implementation to the draft in ES8 released in 2017 (From my understanding). Typescript also added async methods in 2015 in version 1.7 that to the untrained eye look exactly like js async methods.

C# Added async methods in 2012 that look like all other implementations of async/await and were based on F#'s similarly behaving but different looking asynchronous workflows that were introduced in F# 2.0 in 2010. This is the earliest example I know of language built in asynchronous programming - C# with the async/await pair and F# with async flows.

Are there earlier examples of the keywords being used in this context as language constructs (or library)? From my limited information it looks like everyone imitated the good parts of the C# implementation, but did C# copy it from someone else?

If you're just looking for the usage of the words asyncawait in a programming language, that's fairly recent. But asynchronous programming of the kind practiced by asyncawait has been around for a long time.
– Robert Harvey♦Aug 27 '18 at 14:53

In case you don't know, Don Syme is the lead architect of F#, among other things.

Koen Claessen's paper is the older implementation of operations with a result and continuations I can find, dating to 1999. It implements concurrency by defining atomic operations, continuations and a round-robin scheduler. The monaid approach would be the motivation for the switch from message passing to awaiting results.

Prior work for concurrency in Haskell use some form of channels or message passing for communication.

Speaking of prior work, I have to mention Concurrent Haskell, to which "A Poor Man's Concurrency Monad" is an alternative...

In the paper "Implicit and Explicit Parallel Programming in Haskell" Mark and Paul analyze the properties of "fork" and the problem of side effects in concurrency, among other things. They reference the paper "A semantics for ML concurrency primitives" which picks a set concurrent primitives based on Concurrent ML and provides a proof that they preserve sequential execution properties.

This is a really good answer. I’m glad you mentioned Haskell & ML (both of which F# draws inspiration from). I know you’ll hear Haskell folks talking about “continuation style”. async/await is just compiler magic/syntax sugar on top of that concept.
– RubberDuckAug 28 '18 at 0:27

I believe that Microsoft would not take already existing words, so the words async and await can be attributed to the times which you refer to. However, the ideas of Coroutines and Cooperative multitasking are very old.

I dont think it is correct to compare coroutines and asynchronous programming - they offer very different type of abstraction.
– wondraAug 27 '18 at 13:08

"I believe that Microsoft would not take already existing words" - Do you have any basis for that belief? Designers of successful languages are usually more pragmatic than that.
– Sebastian RedlMay 4 at 18:44