From 9444582e445b685f6dbc3573aa1866a00b00c10a Mon Sep 17 00:00:00 2001 From: dudaodong Date: Thu, 21 Apr 2022 14:19:38 +0800 Subject: [PATCH] fix: fix OrDone func --- concurrency/channel.go | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/concurrency/channel.go b/concurrency/channel.go index a7ccfe3..18aa9fb 100644 --- a/concurrency/channel.go +++ b/concurrency/channel.go @@ -222,24 +222,26 @@ func (c *Channel) Or(channels ...<-chan any) <-chan any { // OrDone func (c *Channel) OrDone(ctx context.Context, channel <-chan any) <-chan any { - resStream := make(chan any) + valStream := make(chan any) go func() { - defer close(resStream) - - select { - case <-ctx.Done(): - return - case v, ok := <-channel: - if !ok { - return - } + defer close(valStream) + for { select { - case resStream <- v: case <-ctx.Done(): + return + case v, ok := <-channel: + if !ok { + return + } + select { + case valStream <- v: + case <-ctx.Done(): + } } } + }() - return resStream + return valStream }