#async-task #task-manager #thread-pool #tokio-task #structs #routine #cooler

peachy

桃子是一个简单的异步任务管理器,类似于线程池,但更酷,适用于结构体

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 异步

Download history 25/week @ 2024-06-29 204/week @ 2024-07-06 11/week @ 2024-07-13 207/week @ 2024-07-20 36/week @ 2024-07-27

每月243次下载

MIT 许可证

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