我知道我可以这样做:
func randomFunc() {
// do stuff
go destroyObjectAfterXHours(4, "idofobject")
// do other stuff
}
func destroyObjectAfterXHours(hours int, id string) {
time.Sleep(hours * time.Hour)
destroyObject(id)
}
Run Code Online (Sandbox Code Playgroud)
但是如果我们想象destroyObjectAfterXHours在几分钟内被调用一百万次,这个解决方案就会很糟糕。
我希望有人可以分享一个更有效的解决方案来解决这个问题。
我一直在考虑一个潜在的解决方案,其中销毁时间和对象 id 存储在某处,然后会有一个 func 每 X 分钟遍历一次列表,销毁必须销毁的对象并删除它们的 id 和时间来自该信息存储位置的信息。这会是一个很好的解决方案吗?
我担心这也是一个糟糕的解决方案,因为您将不得不一直遍历包含数百万个项目的列表,然后必须有效地删除一些项目等。
Cer*_*món 16
该time.AfterFunc功能是专为这种使用情况:
func randomFunc() {
// do stuff
time.AfterFunc(4*time.Hour, func() { destroyObject("idofobject") })
// do other stuff
}
Run Code Online (Sandbox Code Playgroud)
time.AfterFunc 高效且易于使用。
正如文档所述,该函数在持续时间过去后在 goroutine 中被调用。goroutine 不是像问题中那样预先创建的。
| 归档时间: |
|
| 查看次数: |
7642 次 |
| 最近记录: |