Как асинхронно читать файл?

Я мог бы создать отдельный поток, который будет действовать как очередь ввода / вывода, но я не уверен, что это лучший способ. Похоже на лучшее.

Я не знаю, как загрузить локальный файл с мио.

1 ответ

Используйте tokio::fs::read:

use tokio::prelude::Future;

fn main() {
    let task = tokio::fs::read("/proc/cpuinfo").map(|data| {
        // do something with the contents of the file ...
        println!("contains {} bytes", data.len());
        println!("{:?}", String::from_utf8(data));
    }).map_err(|e| {
        // handle errors
        eprintln!("IO error: {:?}", e);
    });
    tokio::run(task);
}

Я бы предложил просто раскрутить другую ветку самостоятельно. io не планирует делать это, и создание собственного асинхронного загрузчика позволяет вам полностью контролировать, как и когда происходит чтение / запись, что важно, если ваша цель - производительность (как мне кажется, если вам нужен асинхронный диск I) / О). Вы можете выбрать, записывать или читать отдельные байты, отдельные строки или накапливать блоки и записывать их. Если ваше приложение ожидает чего-то другого в другое время, например, сети, вы можете, например, выбрать запись на диск.

Другие вопросы по тегам