|
@@ -0,0 +1,51 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "fmt"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "github.com/vladimirok5959/golang-worker/worker"
|
|
|
+)
|
|
|
+
|
|
|
+func main() {
|
|
|
+ fmt.Printf("Start!\n")
|
|
|
+
|
|
|
+ w1 := worker.New(func(ctx context.Context, w *worker.Worker) {
|
|
|
+ fmt.Printf("Worker #1 one tick\n")
|
|
|
+ for i := 0; i < 1000; i++ {
|
|
|
+ select {
|
|
|
+ case <-ctx.Done():
|
|
|
+ fmt.Printf("Worker #1 fine I will shutdown!\n")
|
|
|
+ return
|
|
|
+ default:
|
|
|
+ time.Sleep(1 * time.Millisecond)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ w2 := worker.New(func(ctx context.Context, w *worker.Worker) {
|
|
|
+ fmt.Printf("Worker #2 one tick\n")
|
|
|
+ for i := 0; i < 1000; i++ {
|
|
|
+ select {
|
|
|
+ case <-ctx.Done():
|
|
|
+ fmt.Printf("Worker #2 fine I will shutdown!\n")
|
|
|
+ return
|
|
|
+ default:
|
|
|
+ time.Sleep(1 * time.Millisecond)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ time.Sleep(3 * time.Second)
|
|
|
+
|
|
|
+ w1.Finish()
|
|
|
+
|
|
|
+ if err := w2.Shutdown(nil); err != nil {
|
|
|
+ fmt.Printf("Worker #2 shutdown error: %s\n", err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ time.Sleep(1 * time.Second)
|
|
|
+
|
|
|
+ fmt.Printf("End!\n")
|
|
|
+}
|