Rust errors / Everything else
Rust compiler error · checked with rustc 1.99.0
Rust error E0728: await is only allowed inside async functions and blocks
What it means.await can only be used inside an async fn or an async { } block.
What rustc prints
error[E0728]: `await` is only allowed inside `async` functions and blocks
--> main.rs:6:27
|
5 | fn foo() {
| -------- this is not `async`
6 | wake_and_yield_once().await // `await` is used outside `async` context
| ^^^^^ only allowed inside `async` functions and blocksReal output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
Why it happens
- Calling
.awaitinmainor another normal function. - Awaiting inside a closure passed to
maporfor_each, which is not async.
How to fix it
1. Make the function async
And await it from its caller.
async fn load() -> String {
fetch().await
}2. Async main with a runtime
#[tokio::main]
async fn main() {
let s = fetch().await;
}3. Use a loop instead of a closure
Or futures::future::join_all for concurrency.
for url in urls {
let body = get(url).await?;
}Other wordings of this error
await is only allowed inside async functions and blocks, only allowed inside `async` functions and blocks
The compiler team's explanation
await has been used outside async function or async block.
Erroneous code example:
fn foo() {
wake_and_yield_once().await // `await` is used outside `async` context
}
await is used to suspend the current computation until the given future is ready to produce a value. So it is legal only within an async context, like an async function or an async block.
async fn foo() {
wake_and_yield_once().await // `await` is used within `async` function
}
fn bar(x: u8) -> impl Future<Output = u8> {
async move {
wake_and_yield_once().await; // `await` is used within `async` block
x
}
}From rustc --explain E0728 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0061this function takes N arguments but M were supplied
- E0412cannot find type in this scope
- E0515cannot return reference to local variable
- E0605non-primitive cast
- E0717#### This error code is internal to the compiler and will not be emitted with normal Rust code
- E0727`async` coroutines are not yet supported
- E0733recursion in an async fn requires boxing
- E0752`main` function is not allowed to be `async`
Up next
Often hit nextE0061: this function takes N arguments but M were suppliedA related error from the same family.Read it next →Did this answer your question?