A😿
Size: a a a
A😿
A😿
A😿
A😿
A😿
package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"time"
)
func a(ctx context.Context) {
<-ctx.Done()
log.Print("Close a")
}
func b(ctx context.Context, cancel context.CancelFunc) {
defer func() {
if v := recover(); v != nil {
cancel()
}
}()
time.Sleep(2 * time.Second)
log.Panic("Dead")
log.Print("afterlife")
}
func main() {
defer log.Print("Shutdown")
ctx, cancel := context.WithCancel(context.Background())
// defer func() {
// if v := recover(); v != nil {
// cancel()
// }
// }()
intCh := make(chan os.Signal, 1)
signal.Notify(intCh, os.Interrupt, os.Kill, syscall.SIGTERM)
go a(ctx)
go b(ctx, cancel)
select {
case <-ctx.Done():
log.Println("Context is dead")
case <-time.After(10 * time.Second):
log.Println("timeout 2")
case <-intCh:
log.Println("Int")
}
log.Print("End")
cancel()
time.Sleep(100 * time.Microsecond)
}
A😿
A😿
A😿
A😿
ED
ED
ИЕ
ED
ED
🐝
ED
🐝