1.7 KiB
1.7 KiB
协程启动管理器
目前的主要作用是:
- 简化写法,不用自己再defer记录日志
- 优雅关闭
- 统一管理方便后面扩展
- 支持固定队列协程:定义最大数量,超过时会阻塞启动,直接有空闲的时候才会启动
todolist:
- . 控coroutine的状态:数量,时长
使用步骤
-
交给kratos管理生命周期
// 1. 打开main.go // 2. newApp方法中注入logHelper *log.Helper // 3. 按如下代码提供给kratos管理生命周期 coroutineServer := coroutine.NewServer(logHelper) serverOption := kratos.Server( // 省略之前的一些已有变量... coroutineServer, ) -
使用示例
doDesc := "我是闭包中能访问到的变量,可以直接使用" coroutine.Run("我是任务名称", func() { // 模拟执行 fmt.Printf("开始:%s\n", doDesc) time.Sleep(1 * time.Second) fmt.Printf("开始:%s\n", doDesc) }) // 在Run里面会开启协程,不要自己在这里使用go关键字开启协程 // 错误示例:go coroutine.Run("我是任务名称", func() {})
3固定队列使用示例
maxTaskCnt := 10 // 最大并行任务数量。超过时阻塞启动方,直到有有任务执行完成
f := NewFixed(maxTaskCnt)
doDesc := "我是闭包中能访问到的变量,可以直接使用"
f.Run("我是任务名称", func() {
// 模拟执行
fmt.Printf("开始:%s\n", doDesc)
time.Sleep(1 * time.Second)
fmt.Printf("开始:%s\n", doDesc)
})
// 在Run里面会开启协程,不要自己在这里使用go关键字开启协程
// 错误示例:go coroutine.Run("我是任务名称", func() {})