gpt4 book ai didi

c# - 当我加载的另一个 AppDomain 抛出未处理的异常时,我可以隔离我当前的 AppDomain 不被拆除吗?

转载 作者:太空狗 更新时间:2023-10-29 20:34:55 26 4
gpt4 key购买 nike

可能是以下副本:Can I prevent an uncaught exception in another AppDomain from shutting down the application?

一整天都在尝试找出这个问题的答案。

只是想确保答案确实是否定的,然后再丢弃我为将我的驱动程序隔离在它们单独的应用程序域中而编写的所有代码,并将其替换为老式进程。

所以正式问题是这样的。

有一个默认域“ad-default”,我在其中创建了一个新的应用程序域“ad-hosted”,我能否避免来自“ad-hosted”的未处理异常会破坏“ad-default”?

我知道我可以通过连接到“广告托管”域的 UnhandledException 事件来观察异常,但我找不到阻止它们传播到“广告默认”域的方法。

这是真的吗?但是,如果 AppDomain 不提供隔离,我们为什么还要它呢?

编辑:不幸的是,答案是否定的,请参阅此答案以获取解释: AppDomain, handling the exceptions

最佳答案

将另一个应用程序域中的线程中的异常与拆除默认域隔离开来的唯一方法是使用:

 <runtime>
<legacyUnhandledExceptionPolicy enabled="1"/>
<runtime>

这会将 unhandledexception 的 IsTerminating 标志设置为 false,并防止默认域关闭。

在我们的案例中,我们所做的是连接到两个域中的 UnhandledExceptionHandler。然后我们在“ad-hosted”中触发一个 semafore,它将被“ad-default”中为此目的创建的线程获取,然后依次处理“ad-hosted”

这是一个 hack,可能不会在框架的 future 几代中存在,但它使“ad-default”更加健壮,因为它不会因“ad-hosted”中未处理的异常而被拆除

我们还在“ad-default”中连接了一个事件处理程序,它将发送者转换为appdomain并检查异常是否源自“ad-default”,如果是,我们也拆除“ad-default”,模拟行为.net 2.0,即使使用上述运行时设置也是如此。

希望这能为某人提供有关如何制作更具弹性的插件宿主的线索。

关于c# - 当我加载的另一个 AppDomain 抛出未处理的异常时,我可以隔离我当前的 AppDomain 不被拆除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7861367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com