Let's consider the following examples:
main.rs
use futures::executor::block_on;
use futures::future::{FutureExt, TryFutureExt};
async fn fut1() -> Result<String, u32> {
  Ok("ok".to_string())
}
fn main() {
    println!("Hello, world!");
    match block_on(fut1().and_then(|x| async move { Ok(format!("{} is \"ok\"", x)) })) {
      Ok(s) => println!("{}", s),
      Err(u) => println!("{}", u)
    };
}
Cargo.toml
[dependencies]
futures = "^0.3"
I'm asking about the expression |x| async move {} instead of async move |x| {}. The latter is more obvious, but it runs into the compilation error:
error[E0658]: async closures are unstable
Then I wonder, what is the difference between async move || {} and || async move {}. They both seems to be closures for using the move keyword.
$ rustc --version
rustc 1.39.0 (4560ea788 2019-11-04)
 
     
    