VideoClearExcutor函数无法理解
来源:5-5 task示例的实现
阿斯蒂芬潍坊
2019-08-05
func VideoClearExecutor(dc dataChan) error {
errMap := &sync.Map{}
var err error
FORLOOP:
for {
select {
case vid := <-dc:
go func(id interface{}) {
if err := deleteVideo(id.(string)); err != nil {
errMap.Store(id, err)
return
}
if err := dbops.DelVideoDeletionRecord(id.(string)); err != nil {
errMap.Store(id, err)
return
}
}(vid)
default:
break FORLOOP
}
}
errMap.Range(func(k, v interface{}) bool {
err = v.(error)
if err != nil {
return false
}
return true
})
return err
}
老师,这段代码不是很理解
在case vid := <- dc: 这里,主程序起了一个goroutine去执行删除操作,之后主线程可以继续往下执行,这样有没有可能存在goroutine的删除操作还没执行完,主程序就跳出for循环,从而导致没有拿到全部的error的错误。
这里主程序好像没有等goroutine都执行完再跳出循环的操作
写回答
2回答
-
慕田峪7198936
2020-01-05
同学这里怎么解决的呢
00 -
艾文西
2019-08-11
这里应该是缺了个同步
022020-05-09
相似问题