比方第一次a路由的请求,起了一个延时10秒的协程,我现在想在b路由进行的时候,如果还没到10秒,关闭这个协程,应该如何设计呢?
更多评论
如果不能改变产品,那就改变自己。</br>
```go
// 全局timer
var globalTimer *time.Timer
// 在a路由启动任务
globalTimer = time.AfterFunc(10*time.Second, func() { panic(nil) })
// 在b路由取消任务
globalTimer.Stop()
```
#1
简单设计:
1. 把信息存起来,单体服务就用内存,分布式就用其他缓存
2. 把关闭逻辑嵌入协程,并把控制权交出去,单体参考context.Cancel,分布式可以周期扫描任务,这里的时间可能会有偏差
以上都是不得不做的时候才考虑的,如果延迟事件够长为什么不单独协议之延迟任务执行器,把接触执行的令牌下发,当获取到令牌时就解除任务。
#3