后端服务通常会需要创建子协程来进行相应的作业,但进程接受到终止信号或正常结束时,并没有判断或等待子协程执行结束。以下为该问题解决方法:
代码实现
package taskcontroller
import (
"sync"
)
var wgGlobal sync.WaitGroup
func WaitAll() {
wgGlobal.Wait()
}
func Go(do func()) {
if do != nil {
wgGlobal.Add(1)
go func() {
defer wgGlobal.Done()
// 执行do函数
do()
}()
}
}
使用示例
package taskcontroller
import (
"fmt"
"time"
)
func ExampleMain() {
defer WaitAll()
Go(func() {
fmt.Println("start sub goroutine")
time.Sleep(10 * time.Second)
fmt.Println("end sub goroutine")
})
}