package main
import (
"context"
"fmt"
"os"
"os/signal"
"sync"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
wg := &sync.WaitGroup{}
wg.Add(1)
go worker(ctx)
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
<-signalChan
fmt.Println("Signal received. Shutting down...")
cancel()
wg.Wait()
fmt.Println("Graceful shutdown complete.")
}
func worker(ctx context.Context) {
defer fmt.Println("Worker shutting down...")
for {
select {
case <-ctx.Done():
return
default:
fmt.Println("Working...")
time.Sleep(1 * time.Second)
}
}
}
golang 优雅退出任务方式模板
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 这8种学生永远拿不到高分!早看早受益! 下面是一位资深班主任总结了8种成绩提不上去的原因,分别对应8类孩子,如果你...
- 这8种学生永远拿不到高分!早看早受益! 下面是一位资深班主任总结了8种成绩提不上去的原因,分别对应8类孩子,如果你...
- 问题 前段时间发现线上有个服务接口,总是间歇性告警,有时候一天两三次,有时候一天都没有。 告警的逻辑是在一个接口中...
- 最近复习安卓的基础知识,准备面试,发现以前荣哥说过的一种退出所有activity的方法,拿出来和大家分享以下。 ...