是否可以捕获从另一个线程中的一个线程抛出的异常?例如,我从主线程中生成一个线程。生成的线程可能会抛出未捕获的异常。是否有可能让产卵线程捕获这些异常?
一种解决方案是从生成的线程的入口点捕获异常,并通过发布NSNotification
来“处理”异常。然后,产卵线程可以监听这些NSNotification
。但是,这个解决方案似乎有点软木塞,因为它基本上重新实现了@catch子句,给出了不同类型的NSException
s作为参数。我想检查是否有其他解决方案可用。
答案 0 :(得分:3)
这是不可能的,毫无意义的。抛出线程无法知道产生线程当前是否在try
块内运行。如果没有,它会做什么?推迟投掷,直到产卵者关心捕获?如果它永远不会怎么样?
考虑另一种情况。当spawner线程正在执行某些操作并且恰好处于不一致状态时,工作线程中会抛出异常 - 例如,它正在更新某些数据结构。该异常将中断执行流程并使数据处于所述不一致状态。更不用说生产者正在做的任何其他好的任务将永远不完整。
因此,正确的方法是捕获工作线程的顶层并使用[NSObject performSelector:]
之类的东西传递给spawner线程。产卵者应该被告知spawnee中的booboos的一般想法是坚实的,但抛出spawnee的例外产生是不对的。注意 - 我说“扔”,而不是通过Cocoa提供的其他机制。