Функция stdout
pub fn stdout() -> Stdout
io-std.Создаёт новый дескриптор стандартного вывода текущего процесса.
Возвращённый дескриптор позволяет записывать данные в стандартный вывод из среды выполнения Tokio.
При параллельной записи в stdout необходимо соблюдать осторожность: гарантируется целостность только отдельных операций записи в этот AsyncWrite. В частности, следует учитывать, что операции записи с использованием write_all не гарантированно выполняются как одна операция записи, поэтому запись данных несколькими потоками с помощью write_all может привести к перемежению вывода.
Обратите внимание, что, в отличие от std::io::stdout, каждый вызов этого stdout() создаёт новый объект записи, поэтому, например, эта программа не сбрасывает stdout:
tokio::io::stdout().write_all(b"aa").await?;
tokio::io::stdout().flush().await?;Примеры
use tokio::io::{self, AsyncWriteExt};
#[tokio::main]
async fn main() -> io::Result<()> {
let mut stdout = io::stdout();
stdout.write_all(b"Hello world!").await?;
Ok(())
}Ниже приведён пример использования stdio в цикле.
use tokio::io::{self, AsyncWriteExt};
#[tokio::main]
async fn main() {
let messages = vec!["hello", " world\n"];
// When you use `stdio` in a loop, it is recommended to create
// a single `stdio` instance outside the loop and call a write
// operation against that instance on each loop.
//
// Repeatedly creating `stdout` instances inside the loop and
// writing to that handle could result in mangled output since
// each write operation is handled by a different blocking thread.
let mut stdout = io::stdout();
for message in &messages {
stdout.write_all(message.as_bytes()).await.unwrap();
stdout.flush().await.unwrap();
}
}
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/io/fn.stdout.html