检查 Go 中首先完成的任务是什么?
Check what task finish first in Go?
我想知道是否可以同时执行一个任务(比如一个函数,具有不同的参数,例如 int 乘数)运行,以及一个接收 return 值的变量第一个任务完成。有人知道吗?
:D
这是一个基本示例,尽管 Internet 上还有很多其他示例...
https://play.golang.org/p/R__dk09Ymh
package main
import "fmt"
import "time"
func main() {
a := make(chan bool)
b := make(chan bool)
go MySleep(5000, a)
go MySleep(1000, b)
select {
case _ = <-a:
fmt.Println("a returned first")
case _ = <-b:
fmt.Println("b returned first")
}
}
func MySleep(t int, sig chan bool) {
time.Sleep(time.Duration(t))
close(sig)
return
}
你可以扩展它来做任何你想做的事。例如,如果您想旋转任意数量的 goroutines N
直到它们全部完成才停止,那么您可以将 select 包装在 for 中并添加一个标志以指示每个 goroutine 都有在它的频道上发送。请注意,一个制作精良的程序也会在另一个方向上进行通信,因此您可以关闭您的工作人员。
我想知道是否可以同时执行一个任务(比如一个函数,具有不同的参数,例如 int 乘数)运行,以及一个接收 return 值的变量第一个任务完成。有人知道吗? :D
这是一个基本示例,尽管 Internet 上还有很多其他示例... https://play.golang.org/p/R__dk09Ymh
package main
import "fmt"
import "time"
func main() {
a := make(chan bool)
b := make(chan bool)
go MySleep(5000, a)
go MySleep(1000, b)
select {
case _ = <-a:
fmt.Println("a returned first")
case _ = <-b:
fmt.Println("b returned first")
}
}
func MySleep(t int, sig chan bool) {
time.Sleep(time.Duration(t))
close(sig)
return
}
你可以扩展它来做任何你想做的事。例如,如果您想旋转任意数量的 goroutines N
直到它们全部完成才停止,那么您可以将 select 包装在 for 中并添加一个标志以指示每个 goroutine 都有在它的频道上发送。请注意,一个制作精良的程序也会在另一个方向上进行通信,因此您可以关闭您的工作人员。