func (cl *ConfigList) Push(cfg *Config) {
	id := time.Now().UnixNano()
	cl.cond.L.Lock()
	defer cl.cond.L.Unlock()
	if id <= cl.lastID {
		id = cl.lastID + 1
	}
	cfg.TaskID = id
	cl.lastID = id
	cl.taskIDMap[id] = cl.nodes.PushBack(cfg)
	cl.cond.Broadcast()
}
Push adds a configuration to the end of the list. The field `cfg.TaskID` will
be modified to include a unique ID to identify this task.
package config
import (
	"container/list"
	"context"
	"sync"
	"time"
)
type ConfigList struct {
	cond      *sync.Cond
	taskIDMap map[int64]*list.Element
	nodes     list.List
	lastID int64
}
func NewConfigList() *ConfigList {
	return &ConfigList{
		cond:      sync.NewCond(new(sync.Mutex)),
		taskIDMap: make(map[int64]*list.Element),
	}
}