0

以下代码的行为很奇怪,我试图理解原因:

NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(8080);
EmbeddableDocumentStore db = new EmbeddableDocumentStore();
db.DataDirectory = @"C:\Google Drive\TradingFramework\RavenDatabase\";
db.UseEmbeddedHttpServer = true;
db.Initialize();

bool halt = true;

Console.WriteLine("Read to try server");
Console.ReadLine();

“bool halt”上面的代码初始化了一个 RavenDB 数据库,但它与这个问题的目的无关。我跑了2个场景:

  • a) 在 VS2012 中的 Debug 模式下设置一个断点bool halt = true;。那时我应该可以访问在 localhost:8080 上侦听的已创建 Web 服务器。事实并非如此。即使在断点之前将等待循环放入代码中也没有什么不同,Thread.Sleep(xxx).

  • b)我删除了断点,代码执行暂停并在 line 处等待用户输入Console.ReadLine();。在这种情况下,位于 localhost:8080 的服务器会响应并且工作正常。

为什么会这样?为什么当我设置断点 vs Console.Readline() 时某些东西没有执行?请注意,我只是在测试/开发,但我试图了解它有什么不同?我一直认为 a) 和 b) 是一回事,它会中断代码执行。

4

1 回答 1

3

Console.Readline()不会中断执行,它只是等待用户的输入。应用程序中的其他线程继续正常运行。

断点实际上会停止执行以允许您查看应用程序的状态。在这种状态下,所有线程都暂停,因此没有任何响应端口 8080。

您可以打开命令提示符并键入nestat -a,在这种情况下,您应该在任一情况下看到有一个进程正在侦听端口 8080。

于 2013-02-01T05:31:20.447 回答