後述のソースコードの enqueue() 関数の返値を Future<R> にして let result = exec(); の result を非同期で取得するにはどうしたら良いでしょうか? 最終的には以下のように記述できるようにしたいと思っています。
rust
1let now =euqueue(&sender,move||SystemTime::now()).await;
該当のソースコード
rust
1usestd::sync::mpsc::{channel,Receiver,Sender};2usestd::thread::{sleep, spawn};3usestd::time::{Duration,SystemTime};4usestd::fmt::Debug;56typeTASK=Box<dynFnMut()+Send>;78fnmain(){9let(sender, receiver)=channel::<TASK>();10spawn(move||event_loop(receiver));11loop{12sleep(Duration::from_secs(1));13euqueue(&sender,move||SystemTime::now());14}15}1617fneuqueue<R,F>(sender:&Sender<TASK>,mut exec:F)whereF:FnMut()->R+Send,F:'static,R:Debug{18 sender.send(Box::new(move||{19let result =exec();// How to return this result as Future for function enqueue()?20println!("task has been executed with: {:?}", result);21})).unwrap();22}2324fnevent_loop(receiver:Receiver<TASK>){25loop{26letmut exec = receiver.recv().unwrap();27exec();28}29}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/20 13:12 編集