Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何指示没有异常的失败操作(多个AppDomain)?_C#_.net_Exception Handling_Appdomain - Fatal编程技术网

C# 如何指示没有异常的失败操作(多个AppDomain)?

C# 如何指示没有异常的失败操作(多个AppDomain)?,c#,.net,exception-handling,appdomain,C#,.net,Exception Handling,Appdomain,我的理解是,任何appdomain中未经处理的异常都会导致该appdomain崩溃。这与任何标准表单或基于控制台的应用程序中的未处理异常没有什么不同 如果是这样,当您跨越appdomain边界时,如何指示操作失败?我现在正在记录它,以便知道它发生了,但是这个操作是在一个方法中发生的几个操作之一,我不认为任何异常都会中断该方法 为了更具体地说明这一点,我在另一个appdomain中创建的对象(代理)上设置了一个string属性。此操作发生在其他appdomain中,但如果由于某种原因失败,我不想继

我的理解是,任何appdomain中未经处理的异常都会导致该appdomain崩溃。这与任何标准表单或基于控制台的应用程序中的未处理异常没有什么不同

如果是这样,当您跨越appdomain边界时,如何指示操作失败?我现在正在记录它,以便知道它发生了,但是这个操作是在一个方法中发生的几个操作之一,我不认为任何异常都会中断该方法

为了更具体地说明这一点,我在另一个appdomain中创建的对象(代理)上设置了一个string属性。此操作发生在其他appdomain中,但如果由于某种原因失败,我不想继续执行其他操作。它们都发生在一个单一的方法中,因为我需要它作为一个单一的原子操作发生。如果任何操作失败,整个原子操作都需要失败


我想到了一个类似于“上次运行状态”的指示器,我可以在每次运行后检查它,但这似乎很困难。有更好的方法吗?

如果第二个AppDomain中的代码是因为第一个AppDomain中的代码调用而执行的,那么抛出异常应该不会有问题。据我所知,运行时应该将异常传递回调用AppDomain,而不是将其视为未处理的异常。我相信这是建议所有异常都可以序列化的部分原因。

如果这是真的,那么我真的需要看看我在做什么。我正在让一个appdomain在没有我同意的情况下卸载,所以当我稍后尝试卸载它时,我会收到消息“目标应用程序域已卸载。”*深入挖掘*听起来很痛苦。。。你到底是如何从一个域呼叫到另一个域的?我确信,如果它是对代理对象的简单方法调用,那么异常应该可以工作。是的,是由Activator.CreateInstance创建的代理。这就是为什么我认为你所说的意味着我需要去别处寻找。这在当时似乎是有道理的,但这就是为什么你要进行这些旅行,去发现你不知道的东西。等等,我说的对吗?我想我刚发现一篇文章说我大错特错了。。。现在我真的很困惑:-/你能发一个链接到这篇文章吗?通过进一步的挖掘,我发现了这样的情况:在另一个appdomain中创建一个对象的实例,然后处理该实例。没有例外(我正在捕捉),但appdomain会悄悄地消失。我知道这是我造成的,但我错过了一些东西,我必须找到它。在我最初的问题中,我创建了一个实例,然后从该实例中引发了一个异常。如果这与我发布该实例的方式有关,那么他们有相同的原因,我只是在转移注意力。