我的理解是任何应用程序域中未处理的异常都会导致该应用程序域崩溃。这与任何基于标准表单或基于控制台的应用程序中的未处理异常没有什么不同。
如果是这样,您如何在跨越应用程序域边界时指示操作失败?我目前正在记录它,以便我知道它发生了,但该操作是在一个方法中发生的几个操作之一,我认为除了异常之外的任何事情都不会中断该方法。
为了更具体地说明这一点,我在另一个应用程序域中创建的对象(代理)上设置了一个字符串属性。此操作发生在另一个应用程序域中,但如果由于某种原因失败,我不想继续其他操作。它们都发生在一个单一的方法中,因为我需要它作为一个单一的原子操作发生。如果任何操作失败,则整个原子操作需要失败。
我想过类似“最后操作状态”指示器的东西,我可以在每次操作后检查它,但这似乎很麻烦。有没有更好的办法?
最佳答案
如果第二个 AppDomain 中的代码由于来自第一个 AppDomain 中的代码的调用而正在执行,那么抛出异常应该没有问题。据我所知,运行时应该将异常传递回调用 AppDomain,而不是将其视为未处理的异常。我相信这是建议所有异常都可序列化的部分原因。
关于c# - 如何无异常(exception)地指示失败的操作(多个应用程序域)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996084/