从this question开始,是否有任何方法可以确保我正在处理所有可能引发的异常?类似于编译器的模式匹配穷举性警告,但有例外。我认为这很有道理...
答案 0 :(得分:3)
您可以通过SomeException
捕获所有异常,但这通常是一个坏主意,因为您最终还会从外部捕获thrown to the thread的异步异常。
在Haskell中,经常使用asynchronous exceptions来触发其他线程signal out of memory errors等的线程取消。而要捕获异步异常的情况很少见。它们在很大程度上与线程正在运行的实际逻辑无关。但是您仍然可以使用bracket
和finally
之类的函数,以便正确释放被杀死线程所拥有的资源。
有safe-exceptions和unliftio之类的软件包可帮助避免错误地捕获异步异常,同时仍提供catchAny
之类的函数来捕获其他类型的异常。