Răsfoiți Sursa

tstime: add Sleep (#7480)

Sleep is an interruptible sleep variation.

Signed-off-by: Joe Tsai <[email protected]>
Joe Tsai 3 ani în urmă
părinte
comite
9112e78925
1 a modificat fișierele cu 14 adăugiri și 0 ștergeri
  1. 14 0
      tstime/tstime.go

+ 14 - 0
tstime/tstime.go

@@ -5,6 +5,7 @@
 package tstime
 
 import (
+	"context"
 	"errors"
 	"fmt"
 	"strconv"
@@ -164,3 +165,16 @@ func ParseDuration(s string) (time.Duration, error) {
 	}
 	return time.ParseDuration(s)
 }
+
+// Sleep is like [time.Sleep] but returns early upon context cancelation.
+// It reports whether the full sleep duration was achieved.
+func Sleep(ctx context.Context, d time.Duration) bool {
+	timer := time.NewTimer(d)
+	defer timer.Stop()
+	select {
+	case <-ctx.Done():
+		return false
+	case <-timer.C:
+		return true
+	}
+}