mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
context: small refactor to always use Context type instead of multiple types (#9705)
This commit is contained in:
committed by
GitHub
parent
66294e359a
commit
909c9c7ee7
63
vlib/context/deadline_test.v
Normal file
63
vlib/context/deadline_test.v
Normal file
@@ -0,0 +1,63 @@
|
||||
import context
|
||||
import time
|
||||
|
||||
const (
|
||||
// a reasonable duration to block in an example
|
||||
short_duration = 1 * time.millisecond
|
||||
)
|
||||
|
||||
fn after(dur time.Duration) chan int {
|
||||
dst := chan int{}
|
||||
go fn (dur time.Duration, dst chan int) {
|
||||
time.sleep(dur)
|
||||
dst <- 0
|
||||
}(dur, dst)
|
||||
return dst
|
||||
}
|
||||
|
||||
// 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)
|
||||
ctx := context.with_deadline(context.background(), dur)
|
||||
|
||||
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.
|
||||
context.cancel(ctx)
|
||||
}
|
||||
|
||||
after_ch := after(1 * time.second)
|
||||
ctx_ch := ctx.done()
|
||||
select {
|
||||
_ := <-after_ch {
|
||||
assert false
|
||||
}
|
||||
_ := <-ctx_ch {
|
||||
assert true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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.
|
||||
ctx := context.with_timeout(context.background(), short_duration)
|
||||
defer {
|
||||
context.cancel(ctx)
|
||||
}
|
||||
|
||||
after_ch := after(1 * time.second)
|
||||
ctx_ch := ctx.done()
|
||||
select {
|
||||
_ := <-after_ch {
|
||||
assert false
|
||||
}
|
||||
_ := <-ctx_ch {
|
||||
assert true
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user