从列表的大小循环,但在goroutine中未调用某些索引

问题描述

我有一个调度员,我从列表的长度开始循环查找作业的数量,但是循环时有一些未调用的索引

    var members = []Member{
        {ID: 1,Is: true},{ID: 2,Is: false},{ID: 3,}

    numOfWorker := 2
    var durationDelay time.Duration = 5000

    do,_ := worker.NewDispatcher(numOfWorker)
    ch := make(chan worker.MainJob,len(members))

    go func(jobs int) {
        for i := 0; i < jobs; i++ {
            newJob := &worker.NewJob{
                Final: ch,Do: func() worker.MainJob {
                    return worker.MainJob{ID: i,Message: "test"}
                },}
            do.Dispatch(newJob,durationDelay)
        }
        do.Await()
        close(ch)
    }(len(members))

    for v := range ch {
        fmt.Println(v)
    }

当我打印ch时 我知道了:

{1 test}
{3 test}
{3 test}

所以索引0和2不被调用,索引3是从哪里来的?成员的长度为3,因此称为0 1 2 我在这里犯错了吗?

newJob中的Do发送到worker.MainJob的结果到Final

像这样

Final <- Do()

最后一个是chan worker.MainJob,而Do是一个返回worker.MainJob的函数

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)