我需要一个异步函数返回多个项目,而不使用未来的流(即futures::Stream
)。最明显的方法是返回Vec<T>
。但是我希望在这些调用期间避免堆分配。看起来最好的方法是这样:
async fn read_items(offset: usize, count: usize, tmp: Vec<Item>) -> Result<Vec<Item>> {
// Fill the tmp vector.
Ok(tmp)
}
考虑到上面的约束,上面的方法有多优?
我认为我们也可以使用常量泛型来避免堆分配(假设我们知道编译时的计数):
async fn read_items<const N: usize>(offset: usize) -> Result<([Item; N], usize)> {
let mut data = [Item::default(); N];
// Fill the data.
Ok((data, num))
}
函数将返回一对(data, length)
。