mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed?
<!-- Describe what has changed in this PR -->
Remove license header from every file. Because it is really hard to
follow in this PR here is the summary:
1. License header is removed from all `.go` and `.proto` files
:fireworks::fireworks:🎆.
2. `LICENSE` file in the root directory has only Temporal and Uber
copyrights.
3. 5 other `LICENSE` files added to the packages which have copyrights
different from Temporal and Uber: Datadog, Xargin, "Mat Ryer, Tyler
Bunnell and contributors".
4. `license_file` flag is removed from all code generation tools.
5. `copyright_file` flag is removed from `go:generate mockgen`
directive.
6. All copyright related targets are removed from `Makefile`.
7. Updated Temporal copyright year to 2025 everywhere.
## Why?
<!-- Tell your future self why have you made these changes -->
I double checked with legal department that it is not needed to have
license header in every file. One file per repo is enough. I put all
copyrights to the root `LICENSE` file and removed header from all other
files. Also updated tools and `Makefile`.
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package goro
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
)
|
|
|
|
// Group manages a set of long-running goroutines. Goroutines are spawned
|
|
// individually with Group.Go and after that interrupted and waited-on as a
|
|
// single unit. The expected use-case for this type is as a member field of a
|
|
// background process type that spawns one or more goroutines in its Start()
|
|
// function and then stops those same goroutines in its Stop() function.
|
|
// The zero-value of this type is valid. A Group must not be copied after
|
|
// first use.
|
|
type Group struct {
|
|
initOnce sync.Once
|
|
ctx context.Context
|
|
cancel context.CancelFunc
|
|
wg sync.WaitGroup
|
|
}
|
|
|
|
// Go spawns a goroutine whose lifecycle will be managed via this Group object.
|
|
// All functions passed to Go on the same instance of Group will be given the
|
|
// same `context.Context` object, which will be used to indicate cancellation.
|
|
// If the supplied func does not abide by `ctx.Done()` of the provided
|
|
// `context.Context` then `Wait()` on this `Group` will hang until all functions
|
|
// exit on their own (possibly never).
|
|
// NOTE: Errors returned by the supplied function are ignored.
|
|
func (g *Group) Go(f func(ctx context.Context) error) {
|
|
g.initOnce.Do(g.init)
|
|
g.wg.Add(1)
|
|
go func() {
|
|
defer g.wg.Done()
|
|
_ = f(g.ctx)
|
|
}()
|
|
}
|
|
|
|
// Cancel cancels the `context.Context` that was passed to all goroutines
|
|
// spawned via `Go` on this `Group`.
|
|
func (g *Group) Cancel() {
|
|
g.initOnce.Do(g.init)
|
|
g.cancel()
|
|
}
|
|
|
|
// Wait blocks waiting for all goroutines spawned via `Go` on this `Group`
|
|
// instance to complete. If `Go` has not been called then this function returns
|
|
// immediately.
|
|
func (g *Group) Wait() {
|
|
g.wg.Wait()
|
|
}
|
|
|
|
func (g *Group) init() {
|
|
g.ctx, g.cancel = context.WithCancel(context.Background())
|
|
}
|