-
Notifications
You must be signed in to change notification settings - Fork 70
Open
Description
I can do something like this:
wg := workflow.NewWaitGroup()
wg.Add(2)
var wgErr error
workflow.Go(ctx, func(ctx workflow.Context) {
defer wg.Done()
if _, err := workflow.ExecuteActivity[any](ctx, workflow.DefaultActivityOptions, func, ...).Get(ctx); err != nil {
wgErr = err
}
})
workflow.Go(ctx, func(ctx workflow.Context) {
defer wg.Done()
if _, err := workflow.ExecuteActivity[any](ctx, workflow.DefaultActivityOptions, func, ...).Get(ctx); err != nil {
wgErr = err
}
})
wg.Wait(ctx)
if wgErr != nil {
return wgErr
}
But capturing an error can be simplified by using the concept of an error group: https://pkg.go.dev/golang.org/x/sync/errgroup
It would look like this:
gctx, g := workflow.WithErrGroup(ctx)
g.Go(func(ctx workflow.Context) error {
if _, err := workflow.ExecuteActivity[any](ctx, workflow.DefaultActivityOptions, func, ...).Get(ctx); err != nil {
return err
}
return nil
})
g.Go(func(ctx workflow.Context) error {
if _, err := workflow.ExecuteActivity[any](ctx, workflow.DefaultActivityOptions, func, ...).Get(ctx); err != nil {
return err
}
return nil
})
if err := g.Wait(gctx); err != nil {
return err
}
I can open up a PR for this to show you how it looks like. It is functionally close to the impl. of the waitgroup.
Metadata
Metadata
Assignees
Labels
No labels