diff --git a/crates/project/src/project_search.rs b/crates/project/src/project_search.rs index d518af378a2738652e52bae2f46ab768d4cc3a51..db14cdb1b8a150ea1f4423544ab12a334b35757b 100644 --- a/crates/project/src/project_search.rs +++ b/crates/project/src/project_search.rs @@ -11,7 +11,7 @@ use std::{ use anyhow::Context; use collections::HashSet; use fs::Fs; -use futures::{SinkExt, StreamExt, select_biased}; +use futures::{SinkExt, StreamExt, select_biased, stream::FuturesOrdered}; use gpui::{App, AsyncApp, Entity, Task}; use language::{Buffer, BufferSnapshot}; use postage::oneshot; @@ -254,16 +254,15 @@ impl Search { let mut rx = pin!(rx.ready_chunks(64)); _ = maybe!(async move { while let Some(requested_paths) = rx.next().await { - let buffers = self.buffer_store.update(&mut cx, |this, cx| { + let mut buffers = self.buffer_store.update(&mut cx, |this, cx| { requested_paths .into_iter() .map(|path| this.open_buffer(path, cx)) - .collect::>() + .collect::>() })?; - let buffers = futures::future::join_all(buffers).await; - for b in buffers { - if let Some(buffer) = b.log_err() { + while let Some(buffer) = buffers.next().await { + if let Some(buffer) = buffer.log_err() { find_all_matches_tx.send(buffer).await?; } }