用 golang 的一個定時任務的第三方包,每隔 5s 執行 foo 函數,如下:func foo() { onlineRooms := getOnlineRooms()
for _, room := range onlineRooms {
go doSomeThing(room)
}
}這里取出所有在線的房間ID,然后啟用 goroutine 執行 doSomeThing 函數,這個函數里有計算,從 Redis,MySQL 讀寫數據等操作,如果第一輪調用沒執行完,就開始第二輪調用,就會有計算錯誤。那么我想每次定時任務來的時候,判斷這個函數有沒有執行完,如果沒有執行完就不重新調用,否則才調用,在 golang 中如何實現這個判斷呢?
4 回答

千巷貓影
TA貢獻1829條經驗 獲得超7個贊
提供一個簡單便于理解方案:
func foo() { onlineRooms := getOnlineRooms() for _, room := range onlineRooms { go doSomeThing(room) } }func doSomeThing(room Room) { //把redis操作換成全局變量亦可 if redis.Get(room){ return } redis.Set(room,true) defer redis.Set(room,false) }

楊__羊羊
TA貢獻1943條經驗 獲得超7個贊
package main
import (
"fmt"
"sync"
)
var wg *sync.WaitGroup
func main() {
wg = &sync.WaitGroup{}
for {
wg.Wait()
wg.Add(1)
go test()
}
fmt.Println("vim-go")
}
func test() {
//do something
wg.Done()
}

四季花海
TA貢獻1811條經驗 獲得超5個贊
可以在room里加一個字段記錄操作是否完成
func foo() { onlineRooms := getOnlineRooms() for _, room := range onlineRooms { if room.Done { go doSomeThing(room) } } }
- 4 回答
- 0 關注
- 1579 瀏覽
添加回答
舉報
0/150
提交
取消