我想知道在 goroutine 中等待的更好方法是什么,time.Sleep()或者<-time.After()?兩者有什么區別,如何選擇?謝謝。
2 回答

精慕HU
TA貢獻1845條經驗 獲得超8個贊
我認為這對大多數程序來說并不重要。關于 golang-nuts有一個關于此的問題,但我認為無法得出任何結論。
在實踐After中,在已經需要select在多個通道上但也希望超時的情況下很有用:
select {
case c := <-someChan:
..
case c := <-otherChan:
..
case <-time.After(time.Second * 42):
}
通過表面上看代碼Sleep似乎更簡單,同時After構建一個新的計時器,一個句點,一個閉包來發送它完成時的時間等。
同樣,我認為這在實踐中并不重要,但time.Sleep看起來很可讀,所以我會同意。
在我的實現中,它們都執行完全相同的系統調用并最終等待:
futex(??, FUTEX_WAIT, 0, {41, 999892351}
^^ 41 seconds and change
- 2 回答
- 0 關注
- 441 瀏覽
添加回答
舉報
0/150
提交
取消