2 ms·
Javascript has two differences that contribute here: * First, it runs the callee synchronously until the first await, which can fire off network requests, etc.
by Rusky 7y ago
Javascript has two differences that contribute here:
* First, it runs the callee synchronously until the first await, which can fire off network requests, etc.
* Second, continuations are pushed onto queues immediately- the microtask queue that runs when the current event handler returns, for example.
Rust does neither of these things:
* Calling an async function constructs its stack frame without running any of its body.
* Continuations are not managed individually; instead an entire stack of async function frames (aka Futures) is scheduled as a unit (aka a "task").
So if you just write async functions and await them, things behave much more like thread APIs- futures start running when you pass a top-level future to a "spawn" API, and futures run concurrently when you combine them with "join"/"select"/etc APIs.
- roblabla 7y ago> * Calling an async function constructs its stack frame without running any of its body. This is actually possible to do by using async blocks instead of async functions. E.G. you can write this: fn test() -> impl Future<Output = ()> { // Run some things directly here println!("I am running in the current frame"); async { // Run some things in the await println!("I am running in the .await"); } }