希望通过golang实现 这样的一直情况, 后台收到请求,开启一个goroutine进行复杂任务处理, 时间十分钟。
如果这十分钟内再次收到请求, 终止之前的goroutine, 重新开始一个任务处理。 怎么处理比较好
主要是想终止一个可能在执行的goroutine
如果希望在收到新的请求时终止正在运行的 goroutine,可以使用带缓冲的通道来实现。
具体来说,可以在主 goroutine 中创建一个带缓冲的通道,并在新的 goroutine 中监听这个通道。当主 goroutine 收到新的请求时,就向通道中发送一个信号,告诉监听的 goroutine 终止运行。
下面是一个简单的示例代码实现:
package main
import (
"fmt"
"time"
)
func main() {
// 创建带缓冲的通道,用于发送信号
signal := make(chan struct{}, 1)
// 在新的 goroutine 中运行任务
go func() {
for {
// 监听通道,如果收到信号就终止运行
select {
case <-signal:
return
default:
}
// 运行复杂任务,模拟耗时 10 秒
fmt.Println("开始运行任务")
time.Sleep(10 * time.Second)
fmt.Println("任务运行完成")
}
}()
// 模拟每隔 5 秒收到一次请求
for {
time.Sleep(5 * time.Second)
fmt.Println("收到新的请求,终止之前的任务")
signal <- struct{}{}
}
}