Да, вы можете запустить новый поток уровня ОС и запустить цикл событий Tokio:
use futures::future::Future; // 0.1.25
use std::{
thread,
time::{Duration, Instant},
};
use tokio::timer::Delay; // 0.1.14
fn main() {
let t = thread::spawn(|| {
let when = Instant::now() + Duration::from_millis(100);
let task = Delay::new(when)
.and_then(move |_| {
println!("Delay expired");
Ok(())
})
.map_err(|e| panic!("delay errored: {}", e));
tokio::run(task);
});
t.join().unwrap();
}
Вы также можете использовать задачи Токио через tokio::spawn
:
use futures::future::{self, Future}; // 0.1.25
use std::time::{Duration, Instant};
use tokio::timer::Delay; // 0.1.14
fn main() {
tokio::run(future::lazy(|| {
tokio::spawn({
let when = Instant::now() + Duration::from_millis(100);
Delay::new(when)
.and_then(move |_| {
println!("Delay 100 expired");
Ok(())
})
.map_err(|e| panic!("delay errored: {}", e))
});
tokio::spawn({
let when = Instant::now() + Duration::from_millis(200);
Delay::new(when)
.and_then(move |_| {
println!("Delay 200 expired");
Ok(())
})
.map_err(|e| panic!("delay errored: {}", e))
});
future::ok::<_, ()>(())
}))
}