golang 如果通过web请求,执行一个长时间后台任务

  1. 通过请求url, http://mydomain.com/longtimetask
  2. 假如url,对应 Longtimetask Index 方法, 那么

    func (l *Longtimetask) Index(c *gin.Context) {
        // 这个地方,如何执行一个长时间后台任任务? 
        // 我想到的办法,用 goroutine
        // 执行长时间后台服务, Run()
        
        c.JSON(200, gin.H{
            "status": 0,
            "msg":    "success!",
        })        
    }
    
    fun Run() {
        // 长时间后台服务
    }
  3. 请考虑到http长时间请求,会断开, Longtimetask.Index退出后(返回 success ), goroutine 如何继续运行下去?

相关问题:

阅读 6.8k
2 个回答

golang是常驻后台进程,不会因为HTTP断开导致协程也推出。你长时间执行的任务可以放到goroutine中执行。

如果耗时任务执行结果不需要给到客户端‘那么直接放到协程即可
否则只能使用同步模式运行之后把结果返回

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题