✨ Add examples for WaitErr methods
This commit is contained in:
parent
7a2583c8e4
commit
06c15f8250
1 changed files with 90 additions and 0 deletions
90
example_test.go
Normal file
90
example_test.go
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
package waiterr_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"codeberg.org/danjones000/waiterr"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Example() {
|
||||||
|
we := new(waiterr.WaitErr)
|
||||||
|
|
||||||
|
we.Go(func() error {
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
fmt.Println("Goroutine 1 finished")
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
we.Go(func() error {
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
fmt.Println("Goroutine 2 finished with an error")
|
||||||
|
return errors.New("something went wrong in goroutine 2")
|
||||||
|
})
|
||||||
|
|
||||||
|
we.Go(func() error {
|
||||||
|
time.Sleep(150 * time.Millisecond)
|
||||||
|
fmt.Println("Goroutine 3 finished")
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
// Wait for all goroutines and get all errors
|
||||||
|
if err := we.Wait(); err != nil {
|
||||||
|
fmt.Printf("All goroutines finished. Combined error:\n%v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// Goroutine 2 finished with an error
|
||||||
|
// Goroutine 1 finished
|
||||||
|
// Goroutine 3 finished
|
||||||
|
// All goroutines finished. Combined error:
|
||||||
|
// something went wrong in goroutine 2
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExampleWaitErr_WaitForError() {
|
||||||
|
we := new(waiterr.WaitErr)
|
||||||
|
we.Go(func() error {
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
return errors.New("first error from we")
|
||||||
|
})
|
||||||
|
we.Go(func() error {
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
return errors.New("second error from we")
|
||||||
|
})
|
||||||
|
|
||||||
|
if err := we.WaitForError(); err != nil {
|
||||||
|
fmt.Printf("First error returned from we: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// First error returned from we: second error from we
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExampleWaitErr_Unwrap() {
|
||||||
|
we := new(waiterr.WaitErr)
|
||||||
|
we.Go(func() error {
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
return errors.New("first error from we")
|
||||||
|
})
|
||||||
|
we.Go(func() error {
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
return errors.New("second error from we")
|
||||||
|
})
|
||||||
|
we.Go(func() error {
|
||||||
|
time.Sleep(75 * time.Millisecond)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
_ = we.Wait()
|
||||||
|
|
||||||
|
errs := we.Unwrap()
|
||||||
|
for _, e := range errs {
|
||||||
|
fmt.Println(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// second error from we
|
||||||
|
// first error from we
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue