Browse Source

增加工具类

pull/47/head
Sydonian 1 year ago
parent
commit
3978d820a8
1 changed files with 48 additions and 0 deletions
  1. +48
    -0
      utils/sync2/event.go

+ 48
- 0
utils/sync2/event.go View File

@@ -0,0 +1,48 @@
package sync2

import (
"context"
"errors"
"sync"
)

var ErrEventClosed = errors.New("event is closed")
var ErrContextCanceled = errors.New("context canceled")

type Event struct {
ch chan any
closeOnce sync.Once
}

func NewEvent() Event {
return Event{
ch: make(chan any, 1),
}
}

func (e *Event) Set() {
select {
case e.ch <- nil:
default:
}
}

func (e *Event) Wait(ctx context.Context) error {
select {
case _, ok := <-e.ch:
if ok {
return nil
}

return ErrEventClosed

case <-ctx.Done():
return ErrContextCanceled
}
}

func (e *Event) Close() {
e.closeOnce.Do(func() {
close(e.ch)
})
}

Loading…
Cancel
Save