6个版本 (稳定)
1.2.2 | 2022年8月21日 |
---|---|
1.0.1 | 2022年8月15日 |
0.1.0 | 2022年5月14日 |
#15 在 #task-execution
每月下载量 23
12KB
179 行
telecomande
注意:这是故意的拼写错误,这样更容易找到。
描述
一个小型crate,提供通过命令通过处理器执行异步任务的原语。
示例
#[tokio::test]
async fn example() {
use telecomande::Executor;
// the commands you will send to the processor.
#[derive(Debug)]
pub enum Command {
Greet,
Say(String),
}
// the processor that handles commands.
pub struct Proc {
greeting: String,
}
#[telecomande::async_trait]
impl telecomande::Processor for Proc {
type Command = Command;
type Error = ();
async fn handle(&mut self, command: Self::Command) -> Result<(), ()> {
match command {
Command::Greet => println!("{}", self.greeting),
Command::Say(text) => println!("{text}"),
};
Ok(())
}
}
// launches an async task to run the processor when it receives commands.
let handle = telecomande::SimpleExecutor::new(Proc {
greeting: "Hello".into(),
})
.spawn();
// remotes can be clonned and passed between threads.
let remote = handle.remote();
remote.send(Command::Greet).unwrap();
remote.send(Command::Say("telecomande".into())).unwrap();
// output:
// Hello
// telecomande
tokio::time::sleep(std::time::Duration::from_millis(50)).await;
drop(handle);
}
依赖项
~2.7–9MB
~75K SLoC