我想知道是否可以同时运行一个任务(比如一个函数,有不同的参数,例如int乘数),并且一个接收第一个任务的返回值的变量就完成了。有人有什么想法吗? :d
答案 0 :(得分:1)
这是一个基本的例子,虽然互联网上还有很多其他的... 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
}
您可以将其扩展为您想做的任何事情。例如,如果你想旋转一些任意数量的goroutine N
并且在它们全部完成之前不停止,那么你可以将select包装在for中并添加一个标志来指示每个goroutine已发送它的频道。请注意,制作精良的程序也可以在另一个方向进行通信,因此您可以关闭工作人员。