E0728: await is only allowed inside async functions and blocks Rust Origin: Application & API OSI layer 7 · Application Last updated 5 Nov 2026

Rust: error[E0728]: `await` is only allowed inside `async` functions and blocks

You used .await in a normal (sync) function or closure.

Exact message you may see error[E0728]: `await` is only allowed inside `async` functions and blocksonly allowed inside async functions and blocksE0728 this is not `async`error[E0728]: await is only allowed inside async functions
Seen on: Rust

Meaning

Make the function async fn (and .await its callers), use #[tokio::main] for main, wrap with async { ... } blocks, or block on the future with a runtime (tokio::runtime::Handle::current().block_on — never inside async). Closures need async move |..| or return an async block.

Common causes

  • .await in a non-async fn
  • main not async
  • .await inside a sync closure
  • Missing async runtime attribute
  • Mixing sync libraries and async code

⚡ Quick fix

  1. Mark the function async fn
  2. #[tokio::main] async fn main()
  3. Use block_on only at the sync/async boundary

Detailed fix by platform

Rust

  1. rust
    #[tokio::main]
    async fn main() { let body = reqwest::get(url).await?.text().await?; }

How to diagnose

  1. Function — async?
  2. main — Runtime attribute?
  3. Closure — async block?

🔧 Still not fixed?

Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:

Where this error sits

Origin: Application & API. Errors that are often confused with or caused by this one (click to open):

Blocking waiting for file lock on package cache / build directory — Cargo: Blocking waiting for file lock on package cache / on build directory (Rust)Blocking waiting for …Cannot start a runtime from within a runtime (Tokio) — Rust: thread 'main' panicked: Cannot start a runtime from within a runtime — a function like `block_on` tried to block a thread that drives async tasks (Rust)Cannot start a runtim…cargo: failed to get from registry (spurious network error) — Cargo: warning: spurious network error (2 tries remaining): [35] SSL connect error / error: failed to download from `https://index.crates.io/...` (Rust)cargo: failed to get …cargo: failed to select a version for the requirement — Cargo: error: failed to select a version for the requirement `serde = "^2.0"` — candidate versions found which didn't match: 1.0.197 (Rust)cargo: failed to sele…E0521: borrowed data escapes outside of function — Rust: error[E0521]: borrowed data escapes outside of function — `data` escapes the function body here (tokio::spawn requires 'static) (Rust)E0521: borrowed data …E0752: main function is not allowed to be async — Rust: error[E0752]: `main` function is not allowed to be `async` (Rust)E0752: main function …there is no reactor running, must be called from the context of a Tokio 1.x runtime — Rust: thread 'main' panicked: there is no reactor running, must be called from the context of a Tokio 1.x runtime (Rust)there is no reactor r…E0728: aw…

Explore the map of this error Full error map →

🧠 Still stuck? Analyze your error

Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.

💬 What worked for others

No tips yet — did something else fix this for you?

Share what worked for you

Tips are checked by an editor before they appear. Links are removed.