使异步函数返回Vec而不分配的最佳方法



我需要一个异步函数返回多个项目,而不使用未来的流(即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)

最新更新