1 回答

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
cmd在你開始之前你正在等待。在您的舊代碼中的大部分時(shí)間cmd.Wait()之前都會(huì)被調(diào)用。(無(wú)法保證兩個(gè)不同的 goroutine 中的事情何時(shí)發(fā)生,除非您明確使用同步點(diǎn))cmd.Start()
交換goroutine的順序cmd.Start()和內(nèi)部:cmd.Wait()
// Starting the command
if err = cmd.Start(); err != nil {
log.Error().Err(err).Msg("Error starting command")
return err
}
// Wait the command in a goroutine.
g.Go(func() error {
return cmd.Wait()
})
當(dāng)您啟動(dòng)在啟動(dòng)命令后等待的 goroutine 時(shí),您可以保證以cmd.Start()正確cmd.Wait()的順序執(zhí)行。
至于為什么它似乎有效:g.Wait()
“阻塞直到 Go 方法的所有函數(shù)調(diào)用都返回,然后從它們返回第一個(gè)非零錯(cuò)誤(如果有的話)。 ”
所以所有的 go 例程都完成了,包括復(fù)制輸出的例程,然后您會(huì)看到執(zhí)行cmd.Wait().
- 1 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報(bào)