diff --git a/v2/context.go b/v2/context.go index 709f131..213e2eb 100644 --- a/v2/context.go +++ b/v2/context.go @@ -21,7 +21,7 @@ type IContext interface { Set(key string, data any) Get(key string) (any, bool) RemoveMetaData(key string) - CleanupIn(lifetime time.Duration) + CleanupIn(lifetime time.Duration, onCleanup ...func()) Dispatch(event IEvent, filter func(c IContext) bool) IsCaller(c IContext) bool } @@ -88,7 +88,7 @@ func (context *context) RemoveMetaData(key string) { delete(context.metadata, key) } -func (context *context) CleanupIn(lifetime time.Duration) { +func (context *context) CleanupIn(lifetime time.Duration, onCleanup ...func()) { context.mutex.Lock() defer context.mutex.Unlock() @@ -104,6 +104,9 @@ func (context *context) CleanupIn(lifetime time.Duration) { if context.timer != nil { di.Destroy[IContext](context.id) + for _, cleaner := range onCleanup { + cleaner() + } context.timer = nil } }(context.id)