Rust 学习笔记:关于处理任意数量的 future 的练习题
Rust 学习笔记:关于处理任意数量的 future 的练习题
- Rust 学习笔记:关于处理任意数量的 future 的练习题
- 问题一
- 问题二
- 问题三
Rust 学习笔记:关于处理任意数量的 future 的练习题
参考视频:
- https://www.bilibili.com/video/BV154dGYuEv6
问题一
假设 sleep(d) 让程序休眠 d 秒,下面这段代码将执行多少秒?
let futs: Vec<_> = [1, 2, 3].iter().map(|n| async move {sleep(Duration::from_secs(5)).await;n + 1}).collect();for fut in futs {let n = fut.await;println!("{n}");}
答:15 秒。
问题二
假设你正在设计一个 map_ stringify 函数,具有以下规范:
- 接受两个参数:一个输入 Vec 和一个异步函数
- 该函数将输入转换为输出,并且这些输出可以被转换为字符串
- 返回一个字符串化的输出 Vec
以下哪种函数类型签名最能准确表达这个规范?
A.
async fn map_stringify<I, O, F>(inputs: Vec<I>, f: impl Fn(I) -> F,
) -> Vec<String>
whereO: ToString,F: Future<Output = O>,
B.
async fn map_stringify<I, O, F>(inputs: Vec<I>, f: impl Fn(I) -> O,
) -> Vec<impl Future<Output = String>>
whereO: ToString,
C.
async fn map_stringify<I, O, F>(inputs: Vec<String>, f: impl Future<Output = String>
) -> Vec<String>
D.
async fn map_stringify<I, F>(inputs: Vec<I>, f: impl Fn(I) -> F,
) -> Vec<String>
whereF: Future + ToString,
答:A。
问题三
假设你正在编写一个程序,该程序需要运行一些异步代码,但每隔 500 ms 检查一次是否应该停止计算。以下哪个辅助函数最适合完成此任务?
A. yield
B. race / select
C. spawn / spawn_ task
D. join
答:B。