Future это тип, для которого имплементирован трейт Future
Executor. Это может быть ивент-луп, тред пул или что-то еще.
0.3 экспериментальная версия, сейчас все используют 0.1. Принципиальных различий между ними нет.
Уже есть в nightly для futures 0.3. Но tokio пока использует futures 0.1. Есть экспериментальная поддержка
Краткое введение: https://tokio.rs/ Немного про то как работает Executor: http://rust-lang-nursery.github.io/futures-rs/blog/2018/08/17/toykio.html ...
https://docs.rs/tokio-fs/0.1.3/tokio_fs/
https://docs.rs/tokio/0.1.8/tokio/io/fn.stdin.html https://docs.rs/tokio/0.1.8/tokio/io/fn.stdout.html
Использовать blocking.
Task это фьюча верхнего уровня. Т.е. то что передается в tokio::run(..) или tokio::spawn(..). Каждый spawn() создает новый таск. Таск подобен треду операционной системы, но является легковесным.
Дефолтный рантайм tokio запускает тред пул. Таски разбирают треды из пула.
Все верно, так и должно быть! Вы заблокировали текущий тред и теперь ивент луп не может продолжить работу. Безопасно вызывать .wait() можно только на фьючах отправленных в тред пул.