检测Go例程中断

Mur*_*rky -1 concurrency interrupt go interrupted-exception goroutine

有没有办法检测 go 例程在执行时是否被中断?我想要类似于InterruptedExceptionJava的东西: https ://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html

icz*_*cza 5

InterruptedException在Java中,如果线程被Thread.interrupt()方法中断(当它正在等待、睡眠或以其他方式占用时),则会抛出该异常。

\n\n

在 Go 中,您无法从外部中断 Goroutine(请参阅取消 Go 中的阻塞操作),这意味着谈论检测它是没有意义的。

\n\n

如果 goroutine 中执行的函数返回,则 goroutine 可能会正常结束;如果发生紧急情况,则可能会突然结束。但即使它发生恐慌,那也是由于它自己的功能,而不是因为另一个 goroutine 强迫它或中断它。

\n\n

一个 goroutine 只有在它自身支持某种终止时才能被停止,例如,它可以监视另一个 goroutine 可能关闭的通道(或在其上发送一个值),当检测到该 goroutine 时,它​​可能会自动返回\xe2\x80\x93,这将算作正常终止(而不是中断)。

\n