1 个不稳定版本
0.1.0 | 2020年6月15日 |
---|
#1380 在 异步
14KB
168 代码行
一个非真正的异步异步运行器(用于协程等)。
允许在当前线程中运行 futures,直到它们等待或退出。
主要作为协程的替代方案,当您想要一个单独的执行线程,但又希望与主线程同步运行时。也可以用于测试,并作为执行 futures 的基本示例,作为编写自己的调度程序的垫脚石。
它不大,代码有注释。请查看测试用例以获取一些简单示例。
use sync_async_runner::runner;
use std::task::Poll;
use futures_channel::{
mpsc,
oneshot,
};
use futures_util::{
pin_mut,
stream::StreamExt,
};
//!
let (mut sender, receiver) = mpsc::channel(5);
sender.try_send(1u32).unwrap();
sender.try_send(2).unwrap();
sender.try_send(3).unwrap();
sender.close_channel();
let coro = runner(async move {
pin_mut!(receiver);
assert_eq!(receiver.next().await, Some(1));
assert_eq!(receiver.next().await, Some(2));
assert_eq!(receiver.next().await, Some(3));
assert_eq!(receiver.next().await, None);
42
});
pin_mut!(coro);
// Ready immediately since the messages are all there
assert_eq!(coro.as_mut().poll(), Poll::Ready(42));
依赖项
~1.5MB
~35K SLoC