4个版本
0.1.3 | 2023年7月22日 |
---|---|
0.1.2 | 2023年4月30日 |
0.1.1 | 2023年2月20日 |
0.1.0 | 2023年2月7日 |
#1632 in 异步
每月 22 次下载
12KB
147 行
geese_executor
Geese executor是一个用于futures的运行时,集成到Geese事件系统中。它提供了执行异步工作并将结果通过事件发送回的能力。每次触发 geese_executor::notify::Poll
事件时,每个future将被查询一次,并由futures引发的任何事件将广播到所有其他系统。
下面提供了一个执行器使用的简单示例。
use geese::*;
use geese_executor::*;
struct A {
cancellation: CancellationToken,
result: Option<i32>
}
impl A {
async fn do_background_work() -> i32 {
// Do some awaiting
42
}
fn handle_result(&mut self, future_result: &i32) {
self.result = Some(*future_result);
}
}
impl GeeseSystem for A {
const DEPENDENCIES: Dependencies = dependencies()
.with::<GeeseExecutor>();
const EVENT_HANDLERS: EventHandlers<Self> = event_handlers()
.with(Self::handle_result);
fn new(ctx: GeeseContextHandle<Self>) -> Self {
let cancellation = CancellationToken::default();
let result = None;
ctx.get::<GeeseExecutor>().spawn_event(Self::do_background_work())
.with_cancellation(&cancellation);
Self { cancellation, result }
}
}
let mut ctx = GeeseContext::default();
ctx.flush(EventQueue::default()
.with(geese::notify::add_system::<A>())
.with(geese_executor::notify::Poll)
);
assert_eq!(Some(42), ctx.get::<A>().result);
依赖关系
~1.3–3MB
~60K SLoC