From 347405e5c042a4804646e5a503b269a4445cdce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Flc=E3=82=9B?= Date: Fri, 26 Jan 2024 09:52:39 +0800 Subject: [PATCH] feat(signal): Add async support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Flcă‚› --- signal/handler.go | 4 ++++ signal/server.go | 7 ++++++- signal/server_test.go | 4 ++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/signal/handler.go b/signal/handler.go index 5820f402..5195d4a3 100644 --- a/signal/handler.go +++ b/signal/handler.go @@ -8,3 +8,7 @@ type Handler interface { Listen() []os.Signal Handle(os.Signal) } + +type AsyncFeature interface { + Async() bool +} diff --git a/signal/server.go b/signal/server.go index 4191f9a5..d48e1160 100644 --- a/signal/server.go +++ b/signal/server.go @@ -83,7 +83,12 @@ func (s *Server) Start(ctx context.Context) error { case sig := <-ch: if hs, ok := handlers[sig]; ok { for _, h := range hs { - s.handle(sig, h) + // if Support AsyncFeature + if async, ok := h.(AsyncFeature); ok && async.Async() { + go s.handle(sig, h) + } else { + s.handle(sig, h) + } } } } diff --git a/signal/server_test.go b/signal/server_test.go index 7a1c5a42..74c22b3b 100644 --- a/signal/server_test.go +++ b/signal/server_test.go @@ -72,6 +72,10 @@ func (h *example2Handler) Listen() []os.Signal { return []os.Signal{syscall.SIGUSR1} } +func (h *example2Handler) Async() bool { + return false +} + func (h *example2Handler) Handle(os.Signal) { panic("example2Handler panic") }