取消当前正在运行的函数/ goroutine

时间:2018-02-13 09:51:02

标签: go goroutine

我使用gin-gonic作为HTTP处理程序。我希望在用户提出POST请求后预呈现一些图形资源。为此,我放了一个中间件,将一个函数(里面有一个计时器)分配给map[string]func(),并在分配后直接调用该函数。

问题是,当用户发出两个后续请求时,该函数被调用两次。

有没有办法在Javascript中清除函数参考和/或当前正在运行的调用,如clearIntervalclearTimeout

由于

2 个答案:

答案 0 :(得分:3)

没有;你计划运行的任何功能,因为goroutine需要返回或致电runtime.Goexit

如果您正在寻找一种方法来为您的工作者构建取消,Go提供了一个原语来处理它,这已经是任何HTTP请求的一部分 - 上下文。查看Go博客中的这些文章:

Concurrency Patterns: Context

Pipelines and cancellation

答案 1 :(得分:2)

我认为您的渲染功能正在调用库,因此您无法控制大部分时间花费的代码。如果您确实有这样的控制,只需将一个通道传递到goroutine,定期检查通道是否关闭,如果发生这种情况,只需从goroutine return

但实际上我会推荐一个不同的,更简单的解决方案:跟踪(在map)当前正在处理的文件的文件名(或哈希),并在启动之前检查该地图第二个。