55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
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("!!!")
|
|
}
|