我有一个类似于如何用一个小扭曲来阻止Goroutine的问题。我不确定戈鲁丁是否正在运行。
var quit = make(chan bool)
func f1() {
go func() {
t := time.NewTimer(time.Minute)
select {
case <-t.C:
// Do stuff
case <-quit:
return
}
}()
}
func f2() {
quit <- true
}
如果在不到一分钟后被调用,则 goroutine 返回。但是,如果它在一分钟后被调用,则goroutine将已经返回并会阻塞。如果 goroutine 正在运行,我想取消它,否则不执行任何操作。f2()f1()f2()f2()
我在这里试图实现的是执行一项任务,当且仅当它在创建后的一分钟内没有被取消。
澄清:
没有什么可以阻止被多次调用。f2()
一次只有一个戈鲁丁在奔跑。的调用方将确保每分钟调用的次数不超过一次。f1()
慕仙森
jeck猫
相关分类