&self,
request: Request<Rectangle>,
) -> Result<Response<Self::ListFeaturesStream>, Status> {
println!("ListFeatures = {:?}", request);
let (tx, rx) = mpsc::channel(4);
let features = self.features.clone();
tokio::spawn(async move {
for feature in &features[..] {
if in_range(feature.location.as_ref().unwrap(), request.get_ref()) {
println!(" => send {:?}", feature);
tx.send(Ok(feature.clone())).await.unwrap();
}
}
println!(" /// done sending");
});
Ok(Response::new(ReceiverStream::new(rx)))
}
зачем итерация и отправка в канал идут в отдельном потоке?
Чтобы обеспечить параллельную итерацию по features и отправку Response.
Хм... Хотя там из асинка только отправка в channel. Вполне можно обойтись futures::stream::iter()
Обсуждают сегодня