我们有一个单线程调用的函数(我们将其命名为主线程)。在函数体中,我们生成多个工作线程来执行 CPU 密集型工作,等待所有线程完成,然后在主线程上返回结果。
其结果是,调用方可以天真地使用函数,并在内部使用多个核。
目前一切正常。
我们的问题是处理异常。我们不希望工作线程上的异常导致应用程序崩溃。我们希望函数的调用方能够在主线程上捕获它们。我们必须捕获辅助线程上的异常,并将它们传播到主线程,以使它们继续从那里解除。
我们要怎么做?
我能想到的最好的办法就是:
这有一个明显的缺点,那就是只支持有限的一组异常类型,而且每当添加新的异常类型时都需要进行修改。