tstime: add Sleep (#7480)

Sleep is an interruptible sleep variation.

Signed-off-by: Joe Tsai <joetsai@digital-static.net>
This commit is contained in:
Joe Tsai 2023-03-06 17:40:38 -08:00 committed by GitHub
parent 3b18e65c6a
commit 9112e78925
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 0 deletions

View File

@ -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
}
}