Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency 使select语句同时等待多个通道_Concurrency_Go_Channel - Fatal编程技术网

Concurrency 使select语句同时等待多个通道

Concurrency 使select语句同时等待多个通道,concurrency,go,channel,Concurrency,Go,Channel,引自: “select”语句选择一组可能的通信中的哪一个 我们将继续。它看起来类似于“switch”语句,但具有 所有案例都涉及通信操作 如何在case子句中等待多个通道,以便仅当两个通道都返回case时才执行 示例: select { case <-ch1, <-ch2 ... : //wait for ch1 and ch2 // do something case .. } 选择{ 案例无法在同一个选择案例中等待多个通道,也无法在选择案例中

引自:

“select”语句选择一组可能的通信中的哪一个 我们将继续。它看起来类似于“switch”语句,但具有 所有案例都涉及通信操作

如何在
case
子句中等待多个通道,以便仅当两个通道都返回case时才执行

示例

select {

   case <-ch1, <-ch2 ... : //wait for ch1 and ch2 
        // do something 
   case  ..
}
选择{

案例无法在同一个选择案例中等待多个通道,也无法在选择案例中“出错”,如文档所述:

不过,您可以通过其他方式轻松完成类似的操作

不选择:

这仅在c1保证返回时有效,尽管c2可用

v1 := <-c1
v2 := <-c2

v1:=无法在同一个选择案例中等待多个通道,也无法在选择案例中进行“故障排除”,如文档所述:

不过,您可以通过其他方式轻松完成类似的操作

不选择:

这仅在c1保证返回时有效,尽管c2可用

v1 := <-c1
v2 := <-c2
v1:=
c3 := make(chan int, 2)
go func() { c3 <- (<-c1) }()
go func() { c3 <- (<-c2) }()

first := <-c3
second := <-c3
var wg sync.WaitGroup
var v1, v2 int
wg.Add(2)
go func() {
    v1 = <-c1
    wg.Done()
}()
go func() {
    v2 = <-c2
    wg.Done()
}()
wg.Wait()
// v1 and v2 are both set