为什么Environment.Exit会导致LINQPad终止

本文关键字:LINQPad 终止 Environment Exit 为什么 | 更新日期: 2023-09-27 18:25:15

我正在调试LINQPad中包含Environment.Exit(0);的程序。

当这条线Environment.Exit(0);命中时,LINQPad退出。

  1. 为什么会发生这种情况?(在Visual Studio中,显然只是进程终止)
  2. 有没有一种方法可以在不更改原始源的情况下防止这种行为

简单示例:

void Main()
{
    Environment.Exit(0);
}

为什么Environment.Exit会导致LINQPad终止

之所以会发生这种情况,是因为LINQPad在与自身相同的进程中执行查询,通过应用程序域而不是进程隔离查询。

这在最新的测试版中发生了变化:LINQPad现在在自己的过程中运行每个查询。这是为即将到来的集成调试器做准备(不可能调试您自己的进程)。一个令人愉快的副作用是调用Environment.Exit(或抛出StackOverflowException)不再使主机进程崩溃。

LINQPad将执行的代码托管在其自己进程的异步线程中(以不锁定UI),因此当您运行Environment.Exit等指令时,托管进程(因此LINQPad本身)也会受到影响。

您可以通过运行一个进行一些计算的长程序来轻松地检查这一点:任务管理器中没有新的进程,并且linqpad进程的CPU使用率正在根据计算而提高。

例如,您可以在"高级选项"中调整一些与应用程序域相关的内容,但AFAIK无法避免这种行为,因为Linqpad完全依赖于这种方式来执行代码。