<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          dingdayu-go-asyncGo 安全異步任務(wù)

          聯(lián)合創(chuàng)作 · 2023-09-29 07:08

          Go 安全異步任務(wù)

          基于 Go 的安全異步包。

          安裝

          go get github.com/dingdayu/async/v2
          

          示例

          package main
          
          import (
           "context"
           "fmt"
           "os"
           "os/signal"
           "sync"
           "syscall"
           "time"
          
           "github.com/dingdayu/async/v2"
          )
          
          type ExampleAsync struct {
          }
          
          // OnPreRun: 運(yùn)行之前的調(diào)用, panic 會(huì)導(dǎo)致注冊(cè)失敗
          func (a ExampleAsync) OnPreRun() {
           fmt.Printf("\u001B[1;30;42m[info]\u001B[0m ExampleAsync 注冊(cè)成功,開始運(yùn)行!\n")
          }
          
          // Name: 異步任務(wù)的名稱,需要在進(jìn)程內(nèi)唯一,否則會(huì)被替換
          func (a ExampleAsync) Name() string {
           return "example"
          }
          
          // Handle: 異步任務(wù)的核心邏輯,通過(guò) for 進(jìn)行巡航,通過(guò) context 進(jìn)行安全退出
          func (a ExampleAsync) Handle(ctx context.Context, wg *sync.WaitGroup) {
           defer wg.Done()
          
           for {
            select {
            default:
             // todo:: Logical unit
             time.Sleep(3 * time.Second)
             fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
            case <-ctx.Done():
             return
            }
           }
          }
          
          // OnShutdown: 在退出前并行調(diào)用
          func (a ExampleAsync) OnShutdown(s os.Signal) {
           fmt.Printf("\u001B[1;30;42m[info]\u001B[0m ExampleAsync 接收到系統(tǒng)信號(hào)[%s],準(zhǔn)備退出!\n", s.String())
          }
          
          func main() {
           // 處理系統(tǒng) SIGINT and SIGTERM 信號(hào).
           ch := make(chan os.Signal)
           signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
          
           ayc := async.NewAsync(context.Background(), ch)
          
           _ = ayc.Register(ExampleAsync{})
          
           ayc.Wait()
           fmt.Println("[1;30;42m[info]\u001B[0m Task exited")
          }
          
          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天爽夜夜爽夜夜爽精品视频 | 日韩精品三区 | 成人午夜激情片 | 大黑屄| 亚洲欧洲免费视频 |