4个稳定版本
1.1.1 | 2024年7月25日 |
---|---|
1.1.0 | 2024年7月24日 |
1.0.1 | 2024年7月9日 |
1.0.0 | 2024年7月5日 |
#665 in 异步
每月243次下载
17KB
257 行
桃子 🍑
桃子是一个简单的异步任务管理器,类似于线程池,但更酷,适用于结构体
它使用 tokio
构建,不支持 async-std
和 std 线程
示例
use peachy::prelude::*;
#[tokio::main]
async fn main() {
Manager::new()
.add_routine(HelloWorldRoutine)
.run()
.await
.unwrap();
}
struct HelloWorldRoutine;
impl Routine for HelloWorldRoutine {
async fn run(self) -> ManagerResult {
println!("Hello, World!");
Ok(())
}
}
这将输出 Hello, World!
它还提供了Mediator,允许例程通过消息相互通信,而Mediator本身也是一个例程
示例
use peachy::prelude::*;
use peachy::mediator::*;
#[tokio::main]
async fn main() -> ManagerResult {
let mediator = Mediator::new();
Manager::new()
.add_routine(SenderRoutine { con: mediator.connect(AppRoute::SenderRoutine).await })
.add_routine(ReceiverRoutine { con: mediator.connect(AppRoute::ReceiverRoutine).await })
.add_routine(mediator) // should be added after all connections
.run()
.await?;
Ok(())
}
struct SenderRoutine {
con: Connector<AppRoute, AppEvent>
}
impl Routine for SenderRoutine {
async fn run(mut self) -> ManagerResult {
self.con.send(AppRoute::ReceiverRoutine, AppEvent::ReceiverRoutine(ReceiverRoutineEvent::Print("Hello, World!".to_string()))).await?;
Ok(())
}
}
struct ReceiverRoutine {
con: Connector<AppRoute, AppEvent>
}
impl Routine for ReceiverRoutine {
async fn run(mut self) -> ManagerResult {
if let AppEvent::ReceiverRoutine(ReceiverRoutineEvent::Print(text)) = self.con.recv().await.unwrap() {
println!("{}", text);
}
Ok(())
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
enum AppRoute {
SenderRoutine,
ReceiverRoutine,
}
#[derive(Clone, PartialEq)]
enum AppEvent {
ReceiverRoutine(ReceiverRoutineEvent)
}
#[derive(Clone, PartialEq)]
enum ReceiverRoutineEvent {
Print(String)
}
此程序的输出也将是 Hello, World!
依赖关系
~3–10MB
~87K SLoC