go 协程处理。 终止一个可能在运行的协程

问题遇到的现象和发生背景

希望通过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{}{}
    }
}