【发布时间】:2018-08-03 21:46:52
【问题描述】:
func main() {
defer fmt.Println("Main defer")
go t1()
go t2()
go t3()
time.Sleep(20 * time.Second)
}
func t1() {
defer fmt.Println("t1 defer")
time.Sleep(20 * time.Second)
}
func t2() {
defer fmt.Println("t2 defer")
time.Sleep(5 * time.Second)
panic(New("T2"))
}
func t3() {
defer fmt.Println("t3 defer")
time.Sleep(20 * time.Second)
}
1 个线程 (t2) 调用 panic,t2 defer 被调用。 当 t2 出现紧急情况时,其他所有线程也会终止。 我希望调用每个线程的延迟。 这是一个必须恐慌的场景,恐慌在一个线程中。所以我希望每个线程都知道程序将要退出。 有什么方法可以实现吗?
当前输出:
t2 defer
panic: T2
goroutine 19 [running]:
main.t2()
C:/Users/Talha.Irfan/OneDrive - Bentley Systems, Inc/Desktop/go_test/src/main2/main.go:34 +0x105
created by main.main
C:/Users/Talha.Irfan/OneDrive - Bentley Systems, Inc/Desktop/go_test/src/main2/main.go:21 +0xb0
【问题讨论】:
-
当
panic调用你的main程序就像os.Exist一样存在。所以你可以去log.Println()。在帖子中描述您想要实现的目标 -
已经描述过了...现在只调用了 1 个 defer...但是总共有 3 个线程..所以我希望每个线程的每个 defer 都被调用
-
这是一个必须恐慌的场景,恐慌在线程中......所以我希望每个线程都知道程序将要退出。
-
好的,您可以通过编辑您想要实现的目标和原因在您的帖子中提及它。使用退出通道将值发送到不同的线程
-
好的,谢谢,我会调查一下