func Parallel()

in astro/utils/parallel.go [27:45]


func Parallel(ctx context.Context, maxConcurrent int, fns ...func()) {
	wg := sync.WaitGroup{}
	sem := semaphore.NewWeighted(int64(maxConcurrent))

	for _, fn := range fns {
		// https://medium.com/@deckarep/gos-extended-concurrency-semaphores-part-1-5eeabfa351ce
		if err := sem.Acquire(ctx, 1); err != nil {
			break
		}
		wg.Add(1)
		go func(fn func()) {
			defer wg.Done()
			fn()
			sem.Release(1)
		}(fn)
	}

	wg.Wait()
}