Golang实践经验和教训( 十 )
timeout.timer = time.AfterFunc(time.Duration(timeout.duration) * time._Second_ func() {
stateLock.Lock()
defer stateLock.Unlock()
timeout.callback(timeout.session)
)
和无锁的区别是全局映射中的更新是同步的 , 但这不能阻止在调用超时后运行timeout.Cancel()如果计划的计时器已过期但未抓住锁 , 则情况如此然而 。
使用Cancel通道
可以使用cancel通道 , 而不必依赖timer.Stop()(不会阻止到期的计时器执行) ,
这是一个略有不同的方法 。 这样可以将不再通过回调进行递归重新安排 , 而会注册一个无限循环 , 等待cancel信号或超时事件 。
新的Register产生一个新的go线程 , 该线程在超时后运行回调 , 并在执行前一个超时后安排新的超时 。 cancel通道返回给调用方 , 以控制循环应在何时停止 。
推荐阅读
- 原神|原神:不要专门跑去抽4星,以前的教训,让人印象深刻
- 手机游戏|于月仙事件的惨痛教训:不要雇佣一个“手游上瘾”的人!
- edg战队|FPX战胜EDG打出3个名场面,圣枪哥装杯被新人教训,Viper化身院长
- RNG|没有吸取DK的教训?RNG差点“翻车”,米勒说出心里话
- 梦幻西游|梦幻西游:男子沉迷于游戏,半年亏掉30多万,血与泪的教训!
- 大话西游|大话西游2(299)痛的教训!02年老玩家提示不要拿垃圾刷熟练度啊
- 暴雪|暴雪吸取了教训,《暗黑破坏神2:复活》测试的效果还不错
- 我的世界|我的世界:10个“过来人”的经验教训,处理好细节才能笑到最后!
- 华为|又想骗中国放弃自研?特朗普同意解封华为,损失1000亿后买来教训
- 华为|台积电之后,美国瞄准中芯国际?华为余承东:这是教训!