1 个不稳定版本
0.3.0 | 2024年4月15日 |
---|
#1209 in 异步
16KB
237 代码行
async_channel_io
在 async_channel
、Sender
和 Receiver
上包装,实现 AsyncRead
和 AsyncWrite
示例
写入器
use tokio::time;
use async_channel_io::ChannelWriter;
use futures::AsyncWriteExt;
async fn example() {
let (send, recv) = async_channel::unbounded();
let mut async_writer = ChannelWriter::new(send);
async_writer.write(b"Hello").await.unwrap();
tokio::spawn(async move {
time::sleep(time::Duration::from_millis(50)).await;
async_writer.write(b" World!").await.unwrap();
});
let mut message = String::new();
while let Ok(received) = recv.recv().await {
message.push_str(std::str::from_utf8(&received).unwrap())
};
assert_eq!(message, "Hello World!")
}
读取器
use tokio::time;
use async_channel_io::ChannelReader;
use futures::AsyncReadExt;
async fn example() {
let (send, recv) = async_channel::unbounded();
let mut async_reader = ChannelReader::new(recv);
// Have some waiting in receiver
send.send(String::from("hello").into()).await.unwrap();
tokio::spawn(async move {
// send some later
time::sleep(time::Duration::from_millis(50)).await;
send.send(String::from(" world").into()).await.unwrap();
});
let mut buf = vec![0; 11];
async_reader.read_exact(&mut buf).await.unwrap();
let read = String::from_utf8_lossy(&buf).to_string();
assert_eq!("hello world", read);
}
依赖项
~1.5MB
~23K SLoC