mirror of https://github.com/rust-lang/async-book
Review Fixes. Thanks to @eholk
This commit is contained in:
parent
87ac3cbdd3
commit
d4d750523a
|
@ -37,6 +37,7 @@ interprocess
|
||||||
IoBlocker
|
IoBlocker
|
||||||
IOCP
|
IOCP
|
||||||
IoObject
|
IoObject
|
||||||
|
JoinHandle
|
||||||
kqueue
|
kqueue
|
||||||
localhost
|
localhost
|
||||||
LocalExecutor
|
LocalExecutor
|
||||||
|
@ -103,4 +104,3 @@ wakeups
|
||||||
webpages
|
webpages
|
||||||
webserver
|
webserver
|
||||||
Woot
|
Woot
|
||||||
JoinHandle
|
|
||||||
|
|
|
@ -20,4 +20,27 @@ async fn main() {
|
||||||
task::spawn(async move {process_request(&mut stream).await});
|
task::spawn(async move {process_request(&mut stream).await});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ANCHOR_END: example
|
// ANCHOR_END: example
|
||||||
|
use std::time::Duration;
|
||||||
|
async fn my_task(time: Duration) {
|
||||||
|
println!("Hello from my_task with time {:?}", time);
|
||||||
|
task::sleep(time).await;
|
||||||
|
println!("Goodbye from my_task with time {:?}", time);
|
||||||
|
}
|
||||||
|
// ANCHOR: join_all
|
||||||
|
use futures::future::join_all;
|
||||||
|
async fn task_spawner(){
|
||||||
|
let tasks = vec![
|
||||||
|
task::spawn(my_task(Duration::from_secs(1))),
|
||||||
|
task::spawn(my_task(Duration::from_secs(2))),
|
||||||
|
task::spawn(my_task(Duration::from_secs(3))),
|
||||||
|
];
|
||||||
|
// If we do not await these tasks and the function finishes, they will be dropped
|
||||||
|
join_all(tasks).await;
|
||||||
|
}
|
||||||
|
// ANCHOR_END: join_all
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn run_task_spawner() {
|
||||||
|
futures::executor::block_on(task_spawner());
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
# `Spawning`
|
# `Spawning`
|
||||||
|
|
||||||
Spawning allows you to run a new asynchronous task in the background. This allows us to continue executing other code
|
Spawning allows you to run a new asynchronous task in the background. This allows us to continue executing other code
|
||||||
while it is running.
|
while it runs.
|
||||||
|
|
||||||
Say we have a web server that wants to accept connections without blocking the main thread.
|
Say we have a web server that wants to accept connections without blocking the main thread.
|
||||||
To achieve this, we can use the `async_std::task::spawn` function to create and run a new task that handles the
|
To achieve this, we can use the `async_std::task::spawn` function to create and run a new task that handles the
|
||||||
|
@ -12,5 +12,13 @@ task once it's completed.
|
||||||
{{#include ../../examples/06_04_spawning/src/lib.rs:example}}
|
{{#include ../../examples/06_04_spawning/src/lib.rs:example}}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The `JoinHandle` returned by `spawn` implements the `Future` trait, so we can `.await` it to get the result of the task.
|
||||||
|
This will block the current task until the spawned task completes. If the task is not awaited, your program will
|
||||||
|
continue executing without waiting for the task, cancelling it if the function is completed before the task is finished.
|
||||||
|
|
||||||
|
```rust,edition2018
|
||||||
|
{{#include ../../examples/06_04_spawning/src/lib.rs:join_all}}
|
||||||
|
```
|
||||||
|
|
||||||
To communicate between the main task and the spawned task, we can use channels
|
To communicate between the main task and the spawned task, we can use channels
|
||||||
provided by the used async runtime.
|
provided by the async runtime used.
|
Loading…
Reference in New Issue