package concurrent_test import ( "context" "fmt" "time" "github.com/modern-go/concurrent" ) func ExampleUnboundedExecutor_Go() { executor := concurrent.NewUnboundedExecutor() executor.Go(func(ctx context.Context) { fmt.Println("abc") }) time.Sleep(time.Second) // output: abc } func ExampleUnboundedExecutor_StopAndWaitForever() { executor := concurrent.NewUnboundedExecutor() executor.Go(func(ctx context.Context) { everyMillisecond := time.NewTicker(time.Millisecond) for { select { case <-ctx.Done(): fmt.Println("goroutine exited") return case <-everyMillisecond.C: // do something } } }) time.Sleep(time.Second) executor.StopAndWaitForever() fmt.Println("executor stopped") // output: // goroutine exited // executor stopped } func ExampleUnboundedExecutor_Go_panic() { concurrent.HandlePanic = func(recovered interface{}, funcName string) { fmt.Println(funcName) } executor := concurrent.NewUnboundedExecutor() executor.Go(willPanic) time.Sleep(time.Second) // output: // github.com/modern-go/concurrent_test.willPanic } func willPanic(ctx context.Context) { panic("!!!") }