Comments (4)
After the completion of the first loop, subsequent loops are almost always expected to terminate the second arm first, so the tick print will not continue as you expected.
from tokio.
You need to use an if precondition instead of placing the if inside the async block. That way, the branch will be disabled instead of triggering immediately.
See the documentation on select!
for more info on if preconditions.
from tokio.
@Darksonn
Thanks!
But in another form.
If the select arm is not async block but async function:
async fn waitfor(s: &mut bool) {
if *s {
*s = false;
// If comment out this line, the timer will work properly
tokio::time::sleep(tokio::time::Duration::from_secs(3)).await;
}
}
#[test]
fn test() {
tokio::runtime::Runtime::new().unwrap().block_on(async {
tokio::spawn(async move {
let mut timer = tokio::time::interval(tokio::time::Duration::from_secs(1));
let mut s = true;
loop {
tokio::select! {
_= timer.tick() => {
println!("----tick");
}
_ = waitfor(&mut s) => {}
}
}
})
.await
.unwrap();
});
}
from tokio.
You can also await std::future::pending()
to have waitfor
sleep forever / until timer.tick()
triggers.
from tokio.
Related Issues (20)
- Add a `CancellationToken` method for running a future until completion or cancellation HOT 1
- CI failure on windows HOT 3
- Vectored IO for `write_all_buf` HOT 1
- Doc bug in `Command::stdin`? HOT 1
- Include relevant values in ReadBuf.put_slice() panic message HOT 1
- File IO hangs after timeout / cancellation HOT 2
- Use `[lints.rust.unexpected_cfgs.check-cfg]` instead of hacky check-cfg workaround HOT 2
- Helper struct/wrapper for a stream of named pipe connections HOT 7
- tokio::sync::mpsc::bounded::Receiver<T>::is_empty() returns false when recv().await blocks HOT 3
- Feature tokio::sync::mpsc::Receiver::wait_close(&self) HOT 11
- Panic at linked_list.rs - reborn HOT 5
- Every 32 messages `is_empty()` on `Receiver` and `UnboundedReceiver` returns `false` even though len == 0 HOT 1
- LengthDelimitedCodec misses that last N bytes of the frame with num_skip(0) HOT 1
- Segment fault at `poll_future` HOT 8
- app stuck dropping tokio::runtime::runtime::Runtime HOT 1
- regression: tokio::test in 1.38 eats my tests HOT 5
- Sending data frame followed by trailer frame discards the data frame HOT 3
- Really bad tcp performance on windows. HOT 5
- Alternative to AsyncDrop HOT 3
- `arcmutex!` convenience macro HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tokio.