有没有一种方法可以检测go例程在执行时是否被中断?我想要类似于Java中的InterruptedException
:https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html
答案 0 :(得分:3)
InterruptedException
。使用Thread.interrupt()
方法(正在等待,睡眠或以其他方式占用)。
在Go语言中,您无法从外部中断goroutine(请参阅cancel a blocking operation in Go),这意味着谈论检测它毫无意义。
如果goroutine中执行的函数返回,则goroutine可能正常结束,或者如果出现恐慌,它可能会突然结束。但是,即使它感到恐慌,也要归因于其自身的功能,而不是因为另一个goroutine强制或中断了它。
goroutine仅在自身支持某种终止(例如,终止)时才能停止。它可能会监视另一个goroutine可能关闭(或在其上发送值)的通道,该通道在检测到时可能会自动返回-这将视为正常终止(而不是中断)。
答案 1 :(得分:2)
有几种方法可以判断goroutine是否已停止。
sync.WaitGroup
并将其递增1。将WaitGroup
传递到goroutine。在goroutine内,延迟在Done()
上调用WaitGroup
。在goroutine之外,您可以在Wait()
上调用WaitGroup
来知道何时完成。答案 2 :(得分:1)
有没有办法检测go例程在执行时是否被中断?
否。