2021-04-13 07:04:13 +03:00
|
|
|
import context
|
|
|
|
import time
|
|
|
|
|
|
|
|
const (
|
|
|
|
// a reasonable duration to block in an example
|
|
|
|
short_duration = 1 * time.millisecond
|
|
|
|
)
|
|
|
|
|
|
|
|
// This example passes a context with an arbitrary deadline to tell a blocking
|
|
|
|
// function that it should abandon its work as soon as it gets to it.
|
|
|
|
fn test_with_deadline() {
|
|
|
|
dur := time.now().add(short_duration)
|
2021-09-27 17:52:20 +03:00
|
|
|
ctx, cancel := context.with_deadline(context.background(), dur)
|
2021-04-13 07:04:13 +03:00
|
|
|
|
|
|
|
defer {
|
|
|
|
// Even though ctx will be expired, it is good practice to call its
|
|
|
|
// cancellation function in any case. Failure to do so may keep the
|
|
|
|
// context and its parent alive longer than necessary.
|
2021-09-27 17:52:20 +03:00
|
|
|
cancel()
|
2021-04-13 07:04:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
ctx_ch := ctx.done()
|
|
|
|
select {
|
2021-04-25 16:04:07 +03:00
|
|
|
_ := <-ctx_ch {}
|
2021-07-23 23:24:27 +03:00
|
|
|
1 * time.second {
|
2021-04-25 16:04:07 +03:00
|
|
|
panic('This should not happen')
|
2021-04-13 07:04:13 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// This example passes a context with a timeout to tell a blocking function that
|
|
|
|
// it should abandon its work after the timeout elapses.
|
|
|
|
fn test_with_timeout() {
|
|
|
|
// Pass a context with a timeout to tell a blocking function that it
|
|
|
|
// should abandon its work after the timeout elapses.
|
2021-09-27 17:52:20 +03:00
|
|
|
ctx, cancel := context.with_timeout(context.background(), short_duration)
|
2021-04-13 07:04:13 +03:00
|
|
|
defer {
|
2021-09-27 17:52:20 +03:00
|
|
|
cancel()
|
2021-04-13 07:04:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
ctx_ch := ctx.done()
|
|
|
|
select {
|
2021-04-25 16:04:07 +03:00
|
|
|
_ := <-ctx_ch {}
|
2021-07-23 23:24:27 +03:00
|
|
|
1 * time.second {
|
2021-04-25 16:04:07 +03:00
|
|
|
panic('This should not happen')
|
2021-04-13 07:04:13 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|