Expand description
Returns a Future
instead of blocking the current thread.
Use async
in front of fn
, closure
, or a block
to turn the marked code into a Future
.
As such the code will not be run immediately, but will only be evaluated when the returned
future is .await
ed.
We have written an async book detailing async
/await
and trade-offs compared to using threads.
§Control Flow
return
statements and ?
operators within async
blocks do not cause
a return from the parent function; rather, they cause the Future
returned by the block to
return with that value.
For example, the following Rust function will return 5
, causing x
to take the !
type:
In contrast, the following asynchronous function assigns a Future<Output = i32>
to x
, and
only returns 5
when x
is .await
ed:
Code using ?
behaves similarly - it causes the async
block to return a Result
without
affecting the parent function.
Note that you cannot use break
or continue
from within an async
block to affect the
control flow of a loop in the parent function.
Control flow in async
blocks is documented further in the async book.
§Editions
async
is a keyword from the 2018 edition onwards.
It is available for use in stable Rust from version 1.39 onwards.