Async/await

컴퓨터 프로그래밍에서 async/await 패턴은 비동기, 비차단 기능이 일반 동기 기능과 유사한 방식으로 구조화되도록 하는 많은 프로그래밍 언어의 구문 기능 구현이다. 이는 의미상 코루틴(coroutine)의 개념과  관련이 있으며 종종 유사한 기술을 사용하여 구현되며, 주로 약속이나 약속으로 표시되는 유사한 데이터 구조에서 장기(long-running) 실행 비동기 작업이 완료되기를 기다리는 동안 프로그램이 다른 코드를 실행할 수 있는 기회를 제공하기 위한 것이다.  이 기능은 C# 5.0, C++, 파이썬(Python) 3.5, F#, 핵(Hack), 줄리아(Julia), 다트(Dart), 코틀린(Kotlin) 1.1, 러스트(Rust) 1.39, Nim 0.9.4 및 자바스크립트(JavaScript) ES2017에서 그 구현을 찾아 볼 수 있으며 확장, 베타 버전에서  일부 실험적인 작업이 있다. 그리고 Scala의 특정 구현이 있다.  또한 Swift 5.5에서 async/await 패턴 기능이 그 일부로 구현된다.

자바스크립트

러스트
// In the crate's Cargo.toml, we need `futures = "0.3.0"` in the dependencies section,
// so we can use the futures crate

extern crate futures; // There is no executor currently in the `std` library.

// This desugars to something like
// `fn async_add_one(num: u32) -> impl Future<Output = u32>`
async fn async_add_one(num: u32) -> u32 {
    num + 1
}

async fn example_task() {
    let number = async_add_one(5).await;
    println!("5 + 1 = {}", number);
}

fn main() {
    // Creating the Future does not start the execution.
    let future = example_task();

    // The `Future` only executes when we actually poll it, unlike Javascript.
    futures::executor::block_on(future);
}
2019년 11월 7일, 안정적인 Rust 버전에서 async/await가 릴리즈되었다. Rust의 비동기 일반 함수가 async/await패턴에서 강력한 문법 설탕(Syntactic sugar) 기능으로 동기화된 특성의 반환값을 갖는 Future를 구현시켜준다. 현재 유한 상태 기계(finite-state machine, FSM) 로 구현되어 있다.

같이 보기 
 콜백
 즉시 실행 함수

각주 

제어 흐름
프로그래밍 언어