如何延长 Go 中上下文的超时时间?

Wei*_*ang 11 go

例如,创建上下文时超时为 10 秒后。一段时间后(例如2秒后),我想将其刷新为从此时起10秒后。

我能做些什么?

icz*_*cza 10

context.Context不是这样设计的。context.Context被委托给工人,如果工人发现应该允许更多时间,它不能推翻“主人的召唤”。

如果您遇到的情况是要使用初始 10 秒超时,但这 10 秒并不是一成不变的(例如,它可能会在过期之前发生变化),那么不要使用具有 10 秒超时的上下文。相反,使用带有取消函数的上下文:context.WithCancel(),并自行管理 10 秒超时(例如,使用time.AfterFunc()time.Timer)。如果超时已过期,并且您(或您的工作人员)没有检测到应该延长超时,请调用取消函数。

如果在截止日期之前您检测到应该延长超时,请重置计时器,并且不要使用取消函数取消上下文。