-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbasic.rs
More file actions
93 lines (79 loc) · 2.18 KB
/
basic.rs
File metadata and controls
93 lines (79 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
use std::time::Duration;
use persistent_scheduler::core::{
context::{TaskConfiguration, TaskContext},
store::InMemoryTaskStore,
task::{Task, TaskFuture},
task_kind::TaskKind,
};
use serde::{Deserialize, Serialize};
#[tokio::main]
async fn main() {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::INFO)
.init();
let task_store = InMemoryTaskStore::new();
let context = TaskContext::new(task_store)
.register::<MyTask1>()
.register::<MyTask2>()
.set_concurrency("default", 10)
.start_with_cleaner()
.await;
let mut tasks = Vec::new();
for _ in 0..100 {
tasks.push(TaskConfiguration {
inner: MyTask1::new("name1".to_string(), 32),
kind: TaskKind::Once,
delay_seconds: None,
});
}
tokio::spawn(async move {
context.add_tasks(tasks).await.unwrap();
});
tokio::time::sleep(Duration::from_secs(20)).await;
}
#[derive(Clone, Debug, Deserialize, Serialize)]
struct MyTask1 {
pub name: String,
pub age: i32,
}
impl MyTask1 {
pub fn new(name: String, age: i32) -> Self {
Self { name, age }
}
}
impl Task for MyTask1 {
const TASK_KEY: &'static str = "my_task_a";
const TASK_QUEUE: &'static str = "default";
fn run(self) -> TaskFuture {
Box::pin(async move {
// println!("{}", self.name);
// println!("{}", self.age);
//tokio::time::sleep(Duration::from_secs(15)).await;
// println!("my task1 is running");
Ok(())
})
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
struct MyTask2 {
pub name: String,
pub age: i32,
}
impl MyTask2 {
pub fn new(name: String, age: i32) -> Self {
Self { name, age }
}
}
impl Task for MyTask2 {
const TASK_KEY: &'static str = "my_task_b";
const TASK_QUEUE: &'static str = "default";
fn run(self) -> TaskFuture {
Box::pin(async move {
println!("{}", self.name);
println!("{}", self.age);
tokio::time::sleep(Duration::from_secs(100000)).await;
println!("my task2 is running");
Ok(())
})
}
}