| 1234567891011121314151617181920212223242526272829303132333435 |
- package signal
- // CancelSignal is a signal passed to goroutine, in order to cancel the goroutine on demand.
- type CancelSignal struct {
- cancel chan struct{}
- done chan struct{}
- }
- // NewCloseSignal creates a new CancelSignal.
- func NewCloseSignal() *CancelSignal {
- return &CancelSignal{
- cancel: make(chan struct{}),
- done: make(chan struct{}),
- }
- }
- // Cancel signals the goroutine to stop.
- func (this *CancelSignal) Cancel() {
- close(this.cancel)
- }
- // WaitForCancel should be monitored by the goroutine for when to stop.
- func (this *CancelSignal) WaitForCancel() <-chan struct{} {
- return this.cancel
- }
- // Done signals the caller that the goroutine has completely finished.
- func (this *CancelSignal) Done() {
- close(this.done)
- }
- // WaitForDone is used by caller to wait for the goroutine finishes.
- func (this *CancelSignal) WaitForDone() <-chan struct{} {
- return this.done
- }
|