From edcb283d2955bc7b76befa9dbad5a4dbd7d7cc22 Mon Sep 17 00:00:00 2001 From: Sydonian <794346190@qq.com> Date: Fri, 26 Apr 2024 11:05:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/sync2/channel.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/utils/sync2/channel.go b/utils/sync2/channel.go index f279e09..50b3aa8 100644 --- a/utils/sync2/channel.go +++ b/utils/sync2/channel.go @@ -48,30 +48,33 @@ func (c *Channel[T]) Receive(ctx context.Context) (T, error) { } } +// 获取channel的发送端,需要与Closed一起使用,防止错过关闭信号 func (c *Channel[T]) Sender() chan<- T { return c.ch } +// 获取channel的接收端,需要与Closed一起使用,防止错过关闭信号 func (c *Channel[T]) Receiver() <-chan T { return c.ch } +// 获取channel的关闭信号,用于通知接收端和发送端关闭 +func (c *Channel[T]) Closed() <-chan any { + return c.closed +} + +// 关闭channel。注:此操作不会关闭Sender和Receiver返回的channel func (c *Channel[T]) Close() { c.closeOnce.Do(func() { close(c.closed) - close(c.ch) c.err = ErrChannelClosed }) } +// 关闭channel并设置error。注:此操作不会关闭Sender和Receiver返回的channel func (c *Channel[T]) CloseWithError(err error) { c.closeOnce.Do(func() { close(c.closed) - close(c.ch) c.err = err }) } - -func (c *Channel[T]) Closed() <-chan any { - return c.closed -}