csharp;gutter:true;
use crossbeam_channel::{Receiver, bounded};
use tokio::time::{Duration, delay_for};</p>
<h1>[tokio::main]</h1>
<p>async fn main() {
let (s, r) = bounded(10);</p>
<pre><code>for i in 0..100 {
s.send(i).unwrap();
let rx = r.clone();
tokio::task::spawn(async move {
handle(i, rx).await;
});
}
delay_for(Duration::from_secs(10)).await;
</code></pre>
<p>}</p>
<p>async fn handle(i: i32, rx: Receiver) {
let _d = defer::defer(|| {
println!("{} been defer", i);
if let Err(err) = rx.recv() {
println!("err : {:?}", err);
}
});</p>
<pre><code>delay_for(Duration::from_secs(1)).await;
println!("{} been excute", i);
</code></pre>
<p>}
使用 channel 做数量控制, defer 来保证 所有 消息被释放
万水千山总是情, 领个红包行不行?
觉得还可以的话记的打赏哦^.^..
Original: https://www.cnblogs.com/mafeng/p/15029791.html
Author: ma_fighting
Title: rust 实现协程池
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/546611/
转载文章受原作者版权保护。转载请注明原作者出处!