自我训练任务

时间:2020-06-24 06:41:31

标签: go concurrency

我需要通过maxTasks变量限制运行功能。您能检查一下我的答案并可能进行调整吗?

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    maxTasks := 10
    var tasks []func()
    for x := 0; x < 50; x++ {
        fmt.Println("add new task with num ", x)
        tasks = append(tasks, func(x int) func() {
            fmt.Println("create function with ", x)
            return func() {
                worktime := rand.Intn(10)
                time.Sleep(time.Duration(worktime) * time.Second)
                fmt.Println("current task:",x )
                fmt.Println(" with worktime ",worktime)
            }
        }(x))
    }
    //tasks[0]()
    ch := make(chan int, maxTasks)
    for _, task := range tasks {

        go func(t func()) {
            ch <- 1
            t()
            fmt.Println("current task:",len(ch))
            <- ch
        }(task)
    }
    time.Sleep(10000 * time.Second)
}

0 个答案:

没有答案