Julio Biason
3 years ago
3 changed files with 151 additions and 0 deletions
@ -0,0 +1,98 @@ |
|||||||
|
# This file is automatically @generated by Cargo. |
||||||
|
# It is not intended for manual editing. |
||||||
|
version = 3 |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "hermit-abi" |
||||||
|
version = "0.1.19" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" |
||||||
|
dependencies = [ |
||||||
|
"libc", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "libc" |
||||||
|
version = "0.2.117" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "num_cpus" |
||||||
|
version = "1.13.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" |
||||||
|
dependencies = [ |
||||||
|
"hermit-abi", |
||||||
|
"libc", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "pin-project-lite" |
||||||
|
version = "0.2.8" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "proc-macro2" |
||||||
|
version = "1.0.36" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" |
||||||
|
dependencies = [ |
||||||
|
"unicode-xid", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "quote" |
||||||
|
version = "1.0.15" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" |
||||||
|
dependencies = [ |
||||||
|
"proc-macro2", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "syn" |
||||||
|
version = "1.0.86" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" |
||||||
|
dependencies = [ |
||||||
|
"proc-macro2", |
||||||
|
"quote", |
||||||
|
"unicode-xid", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "tokio" |
||||||
|
version = "1.16.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a" |
||||||
|
dependencies = [ |
||||||
|
"num_cpus", |
||||||
|
"pin-project-lite", |
||||||
|
"tokio-macros", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "tokio-macros" |
||||||
|
version = "1.7.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" |
||||||
|
dependencies = [ |
||||||
|
"proc-macro2", |
||||||
|
"quote", |
||||||
|
"syn", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "tokioselect" |
||||||
|
version = "0.1.0" |
||||||
|
dependencies = [ |
||||||
|
"tokio", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "unicode-xid" |
||||||
|
version = "0.2.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" |
@ -0,0 +1,7 @@ |
|||||||
|
[package] |
||||||
|
name = "tokioselect" |
||||||
|
version = "0.1.0" |
||||||
|
edition = "2021" |
||||||
|
|
||||||
|
[dependencies] |
||||||
|
tokio = { version = "1.16.1", features = ["rt", "rt-multi-thread", "macros", "time", "sync"] } |
@ -0,0 +1,46 @@ |
|||||||
|
use tokio::sync::mpsc::channel; |
||||||
|
use tokio::time::sleep; |
||||||
|
use tokio::time::Duration; |
||||||
|
|
||||||
|
#[tokio::main] |
||||||
|
async fn main() { |
||||||
|
let (tx1, mut rx1) = channel(100); |
||||||
|
let (tx2, mut rx2) = channel(100); |
||||||
|
|
||||||
|
tokio::spawn(async move { |
||||||
|
println!("I'm worker 1"); |
||||||
|
let mut loop_id = 1; |
||||||
|
let sleep_time = Duration::from_millis(200); |
||||||
|
loop { |
||||||
|
let message = format!("This is loop 1-{loop_id}"); |
||||||
|
tx1.send(message).await.unwrap(); |
||||||
|
sleep(sleep_time).await; |
||||||
|
loop_id += 1; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
tokio::spawn(async move { |
||||||
|
println!("I'm worker 2"); |
||||||
|
let mut loop_id = 1; |
||||||
|
let sleep_time = Duration::from_millis(300); |
||||||
|
loop { |
||||||
|
let message = format!("This is loop 2-{loop_id}"); |
||||||
|
tx2.send(message).await.unwrap(); |
||||||
|
sleep(sleep_time).await; |
||||||
|
loop_id += 1; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
// This is main
|
||||||
|
loop { |
||||||
|
tokio::select! { |
||||||
|
Some(msg) = rx1.recv() => { |
||||||
|
println!("Worker 1 said \"{}\"", msg); |
||||||
|
} |
||||||
|
Some(msg) = rx2.recv() => { |
||||||
|
println!("Worker 2 said \"{}\"", msg); |
||||||
|
} |
||||||
|
else => { break } |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue