扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

golang浠诲姟璋冨害妗嗘灦鎬庝箞瀹炵幇

扬州沐宇科技
2023-10-24 23:49:41
golang

瑕佸疄鐜颁竴涓狦olang浠诲姟璋冨害妗嗘灦锛屽彲浠ユ寜鐓т互涓嬫楠よ繘琛岋細

  1. 瀹氫箟浠诲姟缁撴瀯浣擄細棣栧厛锛屽畾涔変竴涓换鍔$粨鏋勪綋锛屽寘鍚换鍔$殑灞炴€э紝渚嬪浠诲姟鐨処D銆佸悕绉般€佹墽琛屾椂闂淬€佹墽琛屽懆鏈熺瓑绛夈€?/li>
type Task struct {
    ID       int
    Name     string
    Time     time.Time
    Interval time.Duration
}
  1. 鍒涘缓浠诲姟璋冨害鍣細鍒涘缓涓€涓换鍔¤皟搴﹀櫒缁撴瀯浣擄紝鐢ㄤ簬绠$悊鎵€鏈夌殑浠诲姟銆?/li>
type Scheduler struct {
    tasks []*Task
}
  1. 娣诲姞浠诲姟锛氭彁渚涗竴涓柟娉曪紝鍏佽鐢ㄦ埛鍚戣皟搴﹀櫒涓坊鍔犱换鍔°€?/li>
func (s *Scheduler) AddTask(task *Task) {
    s.tasks = append(s.tasks, task)
}
  1. 鍚姩璋冨害鍣細鍒涘缓涓€涓柟娉曪紝鐢ㄤ簬鍚姩浠诲姟璋冨害鍣ㄣ€傝繖涓柟娉曚細鎸夌収浠诲姟鐨勬墽琛屾椂闂村拰鍛ㄦ湡锛屽畾鏃舵墽琛屼换鍔°€?/li>
func (s *Scheduler) Start() {
    for {
        for _, task := range s.tasks {
            if time.Now().After(task.Time) {
                go func(t *Task) {
                    // 鎵ц浠诲姟鐨勯€昏緫
                    // ...
                }(task)
                if task.Interval > 0 {
                    task.Time = time.Now().Add(task.Interval)
                } else {
                    // 濡傛灉浠诲姟涓嶆槸鍛ㄦ湡鎬ф墽琛岀殑锛屼粠璋冨害鍣ㄤ腑绉婚櫎璇ヤ换鍔?/span>
                    s.RemoveTask(task)
                }
            }
        }
        time.Sleep(1 * time.Second)
    }
}
  1. 绉婚櫎浠诲姟锛氭彁渚涗竴涓柟娉曪紝鍏佽鐢ㄦ埛浠庤皟搴﹀櫒涓Щ闄ゆ煇涓换鍔°€?/li>
func (s *Scheduler) RemoveTask(task *Task) {
    for i, t := range s.tasks {
        if t.ID == task.ID {
            s.tasks = append(s.tasks[:i], s.tasks[i+1:]...)
            break
        }
    }
}
  1. 浣跨敤绀轰緥锛?/li>
func main() {
    scheduler := &Scheduler{}
    
    // 娣诲姞浠诲姟
    task1 := &Task{
        ID:       1,
        Name:     "task1",
        Time:     time.Now().Add(5 * time.Second), // 5绉掑悗鎵ц
        Interval: 0, // 鍙墽琛屼竴娆?/span>
    }
    scheduler.AddTask(task1)
    
    task2 := &Task{
        ID:       2,
        Name:     "task2",
        Time:     time.Now().Add(10 * time.Second), // 10绉掑悗鎵ц
        Interval: 2 * time.Second, // 姣?绉掓墽琛屼竴娆?/span>
    }
    scheduler.AddTask(task2)
    
    // 鍚姩璋冨害鍣?/span>
    scheduler.Start()
}

浠ヤ笂灏辨槸涓€涓畝鍗曠殑Golang浠诲姟璋冨害妗嗘灦鐨勫疄鐜般€傛牴鎹疄闄呴渶姹傦紝鍙互杩涜鏇村鏉傜殑鎵╁睍锛屼緥濡傚鍔犱换鍔$殑浼樺厛绾с€佷换鍔$殑骞跺彂鎺у埗绛夊姛鑳姐€?/p>

扫码添加客服微信