检查首先在Go中完成哪项任务?

时间:2015-06-23 16:32:45

标签: function asynchronous go compare task

我想知道是否可以同时运行一个任务(比如一个函数,有不同的参数,例如int乘数),并且一个接收第一个任务的返回值的变量就完成了。有人有什么想法吗?  :d

1 个答案:

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