2 Star 2 Fork 6

王布衣 / gox

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
context.go 1.08 KB
一键复制 编辑 原始数据 按行查看 历史
王布衣 提交于 2023-10-21 10:29 . 增加应用退出等待机制
package coroutine
import (
"context"
"gitee.com/quant1x/gox/logger"
"gitee.com/quant1x/gox/signal"
"sync"
)
var (
globalOnce sync.Once
globalContext context.Context = nil
globalCancel context.CancelFunc = nil
)
func initContext() {
globalContext, globalCancel = context.WithCancel(context.Background())
}
// Context 获取全局顶层context
func Context() context.Context {
globalOnce.Do(initContext)
return globalContext
}
// Shutdown 关闭应用程序, 通知所有协程退出
func Shutdown() {
globalOnce.Do(initContext)
if globalCancel != nil {
globalCancel()
}
}
func GetContextWithCancel() (context.Context, context.CancelFunc) {
globalOnce.Do(initContext)
ctx, cancel := context.WithCancel(globalContext)
return ctx, cancel
}
// WaitForShutdown 阻塞等待关闭信号
func WaitForShutdown() {
globalOnce.Do(initContext)
interrupt := signal.Notify()
select {
case <-globalContext.Done():
logger.Infof("application shutdown...")
globalCancel()
break
case sig := <-interrupt:
logger.Infof("interrupt: %s", sig.String())
globalCancel()
break
}
}
Go
1
https://gitee.com/quant1x/gox.git
git@gitee.com:quant1x/gox.git
quant1x
gox
gox
v1.21.0

搜索帮助

53164aa7 5694891 3bd8fe86 5694891