10 个版本
0.1.9 | 2023 年 11 月 23 日 |
---|---|
0.1.8 | 2023 年 11 月 23 日 |
#4 在 #crossbeam
用于 ws2
8KB
152 行
Rust: 通道轮询
poll-channel
提供了一种在 Rust 同步编程中进行通道轮询的方法,这个 crate 中使用了 crossbeam 通道。
示例
use poll_channel::{channel, Poll};
#[test]
fn poll_test() -> Result<(), crossbeam::channel::RecvError> {
let (tx1, rx1) = channel();
let (tx2, rx2) = channel();
let poller = Poll::new();
poller.append([&rx1, &rx2]);
let _ = tx1.send(100);
let _ = tx2.send(200);
let mut i = 0;
while i < 3 {
let id = poller.poll(0.01);
if id == rx1.id() {
let n1 = rx1.recv()?;
assert!(n1 == 100);
i += 1;
} else if id == rx2.id() {
let n2 = rx2.recv()?;
assert!(n2 == 200);
i += 1;
} else if id == -1 {
// timeout
i += 1;
break;
}
}
Ok(())
}
lib.rs
:
Rust: 通道轮询
poll-channel
提供了一种在 Rust 同步编程中进行通道轮询的方法,这个 crate 中使用了 crossbeam 通道。
示例
use poll_channel::{channel, Poll};
#[test]
fn poll_test() -> Result<(), crossbeam::channel::RecvError> {
let (tx1, rx1) = channel();
let (tx2, rx2) = channel();
let poller = Poll::new();
poller.append([&rx1, &rx2]);
let _ = tx1.send(100);
let _ = tx2.send(200);
let mut i = 0;
while i < 3 {
let id = poller.poll(0.01);
if id == rx1.id() {
let n1 = rx1.recv()?;
assert!(n1 == 100);
i += 1;
} else if id == rx2.id() {
let n2 = rx2.recv()?;
assert!(n2 == 200);
i += 1;
} else if id == -1 {
// timeout
i += 1;
break;
}
}
Ok(())
}
依赖
~360KB