mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-22 17:31:03 +01:00
41 lines
675 B
Go
41 lines
675 B
Go
package utils
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
var TaskExecChanMap = NewChanMap()
|
|
|
|
type ChanMap struct {
|
|
m sync.Map
|
|
}
|
|
|
|
func NewChanMap() *ChanMap {
|
|
return &ChanMap{m: sync.Map{}}
|
|
}
|
|
|
|
func (cm *ChanMap) Chan(key string) chan string {
|
|
if ch, ok := cm.m.Load(key); ok {
|
|
return ch.(interface{}).(chan string)
|
|
}
|
|
ch := make(chan string, 10)
|
|
cm.m.Store(key, ch)
|
|
return ch
|
|
}
|
|
|
|
func (cm *ChanMap) ChanBlocked(key string) chan string {
|
|
if ch, ok := cm.m.Load(key); ok {
|
|
return ch.(interface{}).(chan string)
|
|
}
|
|
ch := make(chan string)
|
|
cm.m.Store(key, ch)
|
|
return ch
|
|
}
|
|
|
|
func (cm *ChanMap) HasChanKey(key string) bool {
|
|
if _, ok := cm.m.Load(key); ok {
|
|
return true
|
|
}
|
|
return false
|
|
}
|