Фьючерсы в Rust можно опрашивать без блокировки, чтобы проверить, готово ли будущее (и выполнить некоторую работу в процессе). Имея это в виду, можно ли "проверить", готово ли будущее, без потребления его вывода?
Возможный сценарий
stdin
будет опрошен, если есть какие-либо данные, и выполните действие на входе ( детская площадка ):
async fn read_input_if_available() {
use tokio::io::AsyncReadExt;
let mut stdin = tokio::io::stdin();
// if !stdin.ready() {
// return;
// }
let mut input = String::new();
let mut buffer = [0_u8; 1024];
while let Ok(bytes) = stdin.read(&mut buffer).await {
if let Ok(string) = std::str::from_utf8(&buffer[..bytes]) {
input.push_str(string);
}
}
// Take action on `input` here
}
Когда код достигнет await
, он не будет продолжаться, пока на stdin не будет что-то, даже если я просто ожидал EOF
.
, я использовал tokio::io::Stdin
, потому что это проще для отдельного примера, но вопрос в целом о фьючерсах Rust.