diff --git a/lang/channel/cond.go b/lang/channel/cond.go index 8888271c..d9c0c196 100644 --- a/lang/channel/cond.go +++ b/lang/channel/cond.go @@ -25,7 +25,11 @@ type Cond interface { } func NewCond(opts ...CondOption) Cond { - return new(cond) + cd := new(cond) + for _, opt := range opts { + opt(cd) + } + return cd } type condSignal = chan struct{} diff --git a/lang/channel/cond_test.go b/lang/channel/cond_test.go index fb950b20..f750da41 100644 --- a/lang/channel/cond_test.go +++ b/lang/channel/cond_test.go @@ -43,6 +43,18 @@ func TestCond(t *testing.T) { } } +func TestCondTimeout(t *testing.T) { + cd := NewCond(WithCondTimeout(time.Millisecond * 200)) + go func() { + time.Sleep(time.Millisecond * 500) + cd.Broadcast() + }() + begin := time.Now() + cd.Wait(context.Background()) + cost := time.Since(begin) + t.Logf("cost=%dms", cost.Milliseconds()) +} + func BenchmarkChanCond(b *testing.B) { b.ReportAllocs() b.ResetTimer()