golang並發ants和context取消通知demo


package main

import (
	"context"
	"fmt"
	"github.com/panjf2000/ants/v2"
	"time"
)
/*
	test ants&context demo
	@kingram
 */

type Task struct {
	index int
}

func (t *Task) Do() {
	fmt.Println("do...",t.index)
}

func taskFunc(data interface{}) {
	task := data.(*Task)
	task.Do()
}

func main() {
	ctx, cancel :=context.WithCancel(context.Background())
	go t(ctx)

	time.Sleep(time.Second * 10)
	cancel()
	select {}
}

func t(ctx context.Context) {
	p, _ := ants.NewPoolWithFunc(100, taskFunc)
	defer p.Release()

	i := 0
	for {
		select {
		case <-ctx.Done():
			fmt.Println("cancel()....")
			return
		default:
			i++
			task := &Task{
				index:  i,
			}
			p.Invoke(task)
		}
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM