ну вот смотри я изначально не хотел вообще никакого асинка. у меня был например гуи тред и тред качания
все что я хотел чтобы в треде качания можно было разьеденить блокирующие качания и делать вручную поллы например, но так не получилось.
и вскрылось топовое свойство футурок что я могу организовать тред качания не как
loop{ decide_what_to_do -> do_smth}
я могу просто создать десятки футурок со своими таймерами. до этого там была такая лапша
fn decide_to_download(state: &ThreadState) -> MediaOrThread {
let now = Utc::now();
let u = state
.threads
.iter()
.map(|x| (x, now.signed_duration_since(x.last_crawled)))
.max_by_key(|x| x.1)
.filter(|x| x.1 > Duration::seconds(10));
if let Some(obj) = u {
let thread = obj.0;
return MediaOrThread::Thread(thread.clone());
}
теперь я могу просто
loop{
sleep(10)
download()
}