31 lines
666 B
Go
31 lines
666 B
Go
package syncs
|
|
|
|
import "context"
|
|
|
|
type options struct {
|
|
ctx context.Context
|
|
cancel context.CancelFunc
|
|
preLock bool
|
|
termOnError bool
|
|
}
|
|
|
|
// GroupOption functional option type
|
|
type GroupOption func(o *options)
|
|
|
|
// Context passes ctx and makes it cancelable
|
|
func Context(ctx context.Context) GroupOption {
|
|
return func(o *options) {
|
|
o.ctx, o.cancel = context.WithCancel(ctx)
|
|
}
|
|
}
|
|
|
|
// Preemptive sets locking mode preventing spawning waiting goroutine. May cause Go call to block!
|
|
func Preemptive(o *options) {
|
|
o.preLock = true
|
|
}
|
|
|
|
// TermOnErr prevents new goroutines to start after first error
|
|
func TermOnErr(o *options) {
|
|
o.termOnError = true
|
|
}
|