diff --git a/pool/result_error_pool_test.go b/pool/result_error_pool_test.go index 7326639..b95d200 100644 --- a/pool/result_error_pool_test.go +++ b/pool/result_error_pool_test.go @@ -147,3 +147,15 @@ func TestResultErrorPool(t *testing.T) { require.NotErrorIs(t, errs2, err1) }) } + +func TestResultErrorPoolResultsAfterError(t *testing.T) { + t.Parallel() + p := pool.NewWithResults[int]().WithErrors().WithMaxGoroutines(1) + p.Go(func() (int, error) { return 1, nil }) + p.Go(func() (int, error) { return 2, errors.New("an error") }) + p.Go(func() (int, error) { return 3, nil }) + + got, err := p.Wait() + require.Error(t, err) + require.Equal(t, []int{1, 3}, got) +} diff --git a/pool/result_pool.go b/pool/result_pool.go index f73a772..238b345 100644 --- a/pool/result_pool.go +++ b/pool/result_pool.go @@ -138,5 +138,10 @@ func (r *resultAggregator[T]) collect(collectErrored bool) []T { filtered = append(filtered, r.results[r.errored[i-1]+1:e]...) } } + // Append any results after the last errored index. + lastErrored := r.errored[len(r.errored)-1] + if lastErrored+1 < len(r.results) { + filtered = append(filtered, r.results[lastErrored+1:]...) + } return filtered }