1package concurrent_test 2 3import ( 4 "context" 5 "fmt" 6 "time" 7 "github.com/modern-go/concurrent" 8) 9 10func ExampleUnboundedExecutor_Go() { 11 executor := concurrent.NewUnboundedExecutor() 12 executor.Go(func(ctx context.Context) { 13 fmt.Println("abc") 14 }) 15 time.Sleep(time.Second) 16 // output: abc 17} 18 19func ExampleUnboundedExecutor_StopAndWaitForever() { 20 executor := concurrent.NewUnboundedExecutor() 21 executor.Go(func(ctx context.Context) { 22 everyMillisecond := time.NewTicker(time.Millisecond) 23 for { 24 select { 25 case <-ctx.Done(): 26 fmt.Println("goroutine exited") 27 return 28 case <-everyMillisecond.C: 29 // do something 30 } 31 } 32 }) 33 time.Sleep(time.Second) 34 executor.StopAndWaitForever() 35 fmt.Println("executor stopped") 36 // output: 37 // goroutine exited 38 // executor stopped 39} 40 41func ExampleUnboundedExecutor_Go_panic() { 42 concurrent.HandlePanic = func(recovered interface{}, funcName string) { 43 fmt.Println(funcName) 44 } 45 executor := concurrent.NewUnboundedExecutor() 46 executor.Go(willPanic) 47 time.Sleep(time.Second) 48 // output: 49 // github.com/modern-go/concurrent_test.willPanic 50} 51 52func willPanic(ctx context.Context) { 53 panic("!!!") 54} 55