检查 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 都有在它的频道上发送。请注意,一个制作精良的程序也会在另一个方向上进行通信,因此您可以关闭您的工作人员。