I am reading the Asynchronous Programming in Rust book. As the book said: "both learning and singing can happen at the same time as dancing". Following the example, I wrote the simple code to test it. However in my code dancing is always happen after learning and signing. why?
Async/await runs things concurrently by repeatedly swapping out the currently running task, however such swapping can only happen at an .await
. Since learn_song
and sing_song
have no .await
, no such swapping of current task can happen while they run.
This is also why you should never sleep using thread::sleep
. Rust is not able to let some other task run while it is sleeping because there is no .await
.
Check out this example: playground. Additionally try increasing the loop in dancing
to run 20 times.
Without using tokio, how can I yield a task?
You are not going to be able to do anything useful without an executor. The yield function should be available in whatever executor you are using.
It doesn't have one. The futures crate does not provide a full featured executor.
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.