Tao Wen 7 anni fa
parent
commit
27b2666ed6
2 ha cambiato i file con 41 aggiunte e 3 eliminazioni
  1. 39 1
      README.md
  2. 2 2
      unbounded_executor_test.go

+ 39 - 1
README.md

@@ -8,4 +8,42 @@
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://raw.githubusercontent.com/modern-go/concurrent/master/LICENSE)
 
 * concurrent.Map: backport sync.Map for go below 1.9
-* concurrent.Executor: goroutine with explicit ownership and cancellable
+* concurrent.Executor: goroutine with explicit ownership and cancellable
+
+# concurrent.Map
+
+because sync.Map is only available in go 1.9, we can use concurrent.Map to make code portable
+
+```go
+m := concurrent.NewMap()
+m.Store("hello", "world")
+elem, found := m.Load("hello")
+// elem will be "world"
+// found will be true
+```
+
+# concurrent.Executor
+
+```go
+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")
+```
+
+attach goroutine to executor instance, so that we can
+
+* cancel it by stop the executor with Stop/StopAndWait/StopAndWaitForever
+* handle panic by callback: the default behavior will no longer crash your application

+ 2 - 2
unbounded_executor_test.go

@@ -32,10 +32,10 @@ func ExampleUnboundedExecutor_StopAndWaitForever() {
 	})
 	time.Sleep(time.Second)
 	executor.StopAndWaitForever()
-	fmt.Println("exectuor stopped")
+	fmt.Println("executor stopped")
 	// output:
 	// goroutine exited
-	// exectuor stopped
+	// executor stopped
 }
 
 func ExampleUnboundedExecutor_Go_panic() {