Go 围棋频道的使用
我正在寻找使用go通道对以下功能进行验证/更好的设计- main()中的进程X必须在轮询进程之后运行。启动进程X后,如果它成功运行,则需要每分钟检查一次。如果出现故障,则需要在再次轮询后重新启动进程(如果需要)Go 围棋频道的使用,go,goroutine,Go,Goroutine,我正在寻找使用go通道对以下功能进行验证/更好的设计- main()中的进程X必须在轮询进程之后运行。启动进程X后,如果它成功运行,则需要每分钟检查一次。如果出现故障,则需要在再次轮询后重新启动进程(如果需要) startX:=make(chan bool) startedX:=制造(chan bool) startX为什么在这里需要通道:为什么不使用布尔值?你甚至可能不需要它-一个无限循环在你开始后运行rePoll,它的工作原理是相同的:对于{poll()X.Run()rePoll()X.ca
startX:=make(chan bool)
startedX:=制造(chan bool)
startX为什么在这里需要通道:为什么不使用布尔值?你甚至可能不需要它-一个无限循环在你开始后运行rePoll
,它的工作原理是相同的:对于{poll()X.Run()rePoll()X.cancel()}
我想你可能需要一个检查X并使用time.Ticker每隔一定时间轮询一次的例程。
startX := make(chan bool)
startedX := make(chan bool)
startX <- true
for {
select {
case <-startX:
//Check if a worked needs to be started
poll()
// Start process
X.Run()
// Started X
startedX <- true
case <-startedX:
// keep polling for errors
rePoll()
// cancel on error
X.cancel()
// return to startX (To see if the worker needs to be restarted or if another worker has already been started)
startX <- true
}
}