docs: fix channel select example (#10213)

pull/10218/head
Khaled Hammouda 2021-05-27 05:47:13 -04:00 committed by GitHub
parent 539594bfce
commit 25645dbc44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 22 deletions

View File

@ -2885,29 +2885,48 @@ y := <-ch2 ?
The `select` command allows monitoring several channels at the same time
without noticeable CPU load. It consists of a list of possible transfers and associated branches
of statements - similar to the [match](#match) command:
```v wip
```v
import time
fn main () {
c := chan f64{}
ch := chan f64{}
ch2 := chan f64{}
ch3 := chan f64{}
mut b := 0.0
// ...
select {
a := <-ch {
// do something with `a`
}
b = <-ch2 {
// do something with predeclared variable `b`
}
ch3 <- c {
// do something if `c` was sent
}
> 500 * time.millisecond {
// do something if no channel has become ready within 0.5s
}
}
fn main() {
ch := chan f64{}
ch2 := chan f64{}
ch3 := chan f64{}
mut b := 0.0
c := 1.0
// ... setup go threads that will send on ch/ch2
go fn (the_channel chan f64) {
time.sleep(5 * time.millisecond)
the_channel <- 1.0
}(ch)
go fn (the_channel chan f64) {
time.sleep(1 * time.millisecond)
the_channel <- 1.0
}(ch2)
go fn (the_channel chan f64) {
_ := <-the_channel
}(ch3)
//
select {
a := <-ch {
// do something with `a`
eprintln('> a: $a')
}
b = <-ch2 {
// do something with predeclared variable `b`
eprintln('> b: $b')
}
ch3 <- c {
// do something if `c` was sent
time.sleep(5 * time.millisecond)
eprintln('> c: $c was send on channel ch3')
}
> 500 * time.millisecond {
// do something if no channel has become ready within 0.5s
eprintln('> more than 0.5s passed without a channel being ready')
}
}
eprintln('> done')
}
```