mirror of
https://github.com/niusmallnan/steve.git
synced 2025-04-28 11:16:29 +00:00
30 lines
490 B
Go
30 lines
490 B
Go
package clustercache
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"sync/atomic"
|
|
)
|
|
|
|
type cancelCollection struct {
|
|
id int64
|
|
items sync.Map
|
|
}
|
|
|
|
func (c *cancelCollection) Add(ctx context.Context, obj interface{}) {
|
|
key := atomic.AddInt64(&c.id, 1)
|
|
c.items.Store(key, obj)
|
|
go func() {
|
|
<-ctx.Done()
|
|
c.items.Delete(key)
|
|
}()
|
|
}
|
|
|
|
func (c *cancelCollection) List() (result []interface{}) {
|
|
c.items.Range(func(key, value interface{}) bool {
|
|
result = append(result, value)
|
|
return true
|
|
})
|
|
return
|
|
}
|