Согласно документам async_std::task
вы не можете.
Этот модуль похож на std :: thread, за исключением того, что вместо потоков используются асинхронные задачи.
Таким образом, он предназначен для создания нового потока, как вы начинаете новый поток с std::thread::spawn
.
Если вы хотите обрабатывать данные последовательно, вы можете реализовать рабочий шаблон производителя:
use async_std::task;
use std::time;
#[async_std::main]
async fn main() {
let (tx, rx) = flume::unbounded();
let s = task::spawn(async move {
for n in rx.into_iter() {
println!("Calc fib of {}", n);
let fib = fib_async(n).await;
println!("{}", fib);
}
});
let start = time::Instant::now();
tx.send(40).unwrap();
tx.send(40).unwrap();
drop(tx);
s.await;
let elap = time::Instant::now().duration_since(start);
println!("time took for tasks to finish: {} seconds", elap.as_secs());
}
async fn fib_async(n: i32) -> i32 {
fib(n)
}
fn fib(n: i32) -> i32 {
if n == 0 || n == 1 {
1
} else {
fib(n - 1) + fib(n - 2)
}
}
С зависимостями Car go:
[dependencies]
async-std = { version = "1.5", features = ["attributes"] }
flume = "0.7"