Files
tasks/common/goro/example_group_test.go
zeekay 5a601d081b rebrand: go.temporal.io/server -> github.com/hanzoai/tasks
Full module path rebrand from Temporal to Hanzo Tasks:
- go.mod module: github.com/hanzoai/tasks
- All internal Go imports updated (1906 files)
- cmd/server renamed to cmd/tasksd
- Binary name: tasksd (was temporal-server)
- Docker images: hanzoai/tasks (was temporalio/server)
- README rewritten with Hanzo Tasks branding
- LLM.md created with integration notes
- Makefile, goreleaser, CI workflows updated
- go.temporal.io/sdk and go.temporal.io/api imports preserved (separate repos)

Fork of Temporal.io (MIT license).
2026-03-19 10:36:40 -07:00

73 lines
1.5 KiB
Go

package goro_test
import (
"context"
"fmt"
"time"
"github.com/hanzoai/tasks/common/goro"
)
type ExampleService struct {
gorogrp goro.Group // goroutines managed in here
}
func (svc *ExampleService) Start() {
// launch two background goroutines
svc.gorogrp.Go(svc.backgroundLoop1)
svc.gorogrp.Go(svc.backgroundLoop2)
}
func (svc *ExampleService) Stop() {
// stop all goroutines in the goro.Group
svc.gorogrp.Cancel() // interrupt the background goroutines
svc.gorogrp.Wait() // wait for the background goroutines to finish
}
func (svc *ExampleService) backgroundLoop1(ctx context.Context) error {
fmt.Println("starting backgroundLoop1")
defer fmt.Println("stopping backgroundLoop1")
for {
timer := time.NewTimer(1 * time.Minute)
select {
case <-timer.C:
// do something every minute
case <-ctx.Done():
timer.Stop()
return nil
}
}
}
func (svc *ExampleService) backgroundLoop2(ctx context.Context) error {
fmt.Println("starting backgroundLoop2")
defer fmt.Println("stopping backgroundLoop2")
for {
timer := time.NewTimer(10 * time.Second)
select {
case <-timer.C:
// do something every 10 seconds
case <-ctx.Done():
timer.Stop()
return nil
}
}
}
func ExampleGroup() {
var svc ExampleService
svc.Start()
svc.Stop()
// it is safe to call svc.Stop() multiple times
svc.Stop()
svc.Stop()
svc.Stop()
// Unordered output:
// starting backgroundLoop1
// starting backgroundLoop2
// stopping backgroundLoop1
// stopping backgroundLoop2
}