为什么Environment.Exit导致LINQPad终止
我调试在LINQPad
含有Environment.Exit(0);
的程序。为什么Environment.Exit导致LINQPad终止
当这条线Environment.Exit(0);
命中,LINQPad
退出。
- 它为什么会发生? (在
Visual Studio
,显然只是进程终止)。 - 有没有一种方法可以在不更改原始来源的情况下防止这种行为?
简单的例子:在异步线程执行的代码(不锁UI)它自己的进程,所以当你运行诸如Environment.Exit指令,托管进程
void Main()
{
Environment.Exit(0);
}
发生这种情况是因为LINQPad在与自身相同的进程中执行查询,通过应用程序域而不是进程隔离查询。
这种情况已经改变in the latest beta:LINQPad现在运行在自己的进程中每个查询。这是为即将到来的集成调试器做准备(不可能调试你自己的进程)。一个令人愉快的副作用是调用Environment.Exit(或引发StackOverflowException)不会再使主机进程崩溃。
LINQPad主机(因此Linqpad本身)也受到影响。
您可以轻松地通过运行一个长的节目,这使得一些计算检查:有在任务管理器中没有新的进程,并linqpad进程的CPU使用率,根据计算提高。
你可以调整在与例如应用领域的高级选项的几件事情,但据我所知是没有办法避免这种行为,因为Linqpad完全靠这种方式来执行代码。
+1,感谢您的解释,这正是我的想法,请注意,这将在即将发布的版本中发生变化。 – Ofiris 2014-10-04 12:09:13
因为这就是它 - 退出过程。 Visual Studio(我假设你是指在即时窗口中)使用“_myapp_.vshost.exe”进程来执行你的命令,所以它退出这个,而不是VS本身。 – 2014-10-02 07:28:12
因此,LINQPad组件与我正在调试的程序集在相同的进程上运行。 – Ofiris 2014-10-02 07:41:58