Non-leaf futures
Non-leaf futures are the kind of futures we as users of a runtime write ourselves using the async
keyword to create a task that can be run on the executor.
The bulk of an async program will consist of non-leaf futures, which are a kind of pause-able computation. This is an important distinction since these futures represent a set of operations. Often, such a task will await
a leaf future as one of many operations to complete the task.
This is an example of a non-leaf future:
let non_leaf = async { let mut stream = TcpStream::connect("127.0.0.1:3000").await.unwrap(); println!("connected!"); let result = stream.write(b"hello world\n").await; println!("message sent!"); ... };
The two highlighted lines indicate points where we pause the execution, yield control to a runtime, and eventually resume. In...