以下代码表现很奇怪,我试图理解原因:
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内的行bool halt = true;
处的调试模式中设置断点。那时我应该可以访问一个在localhost:8080上监听的创建的Web服务器。事实并非如此。即使在断点之前将等待循环放入代码中也没有区别,Thread.Sleep(xxx)
也没有。
b)我删除了断点并停止了代码执行,并等待行Console.ReadLine();
处的用户输入。在这种情况下,localhost:8080上的服务器响应并正常工作。
为什么会这样?为什么在设置断点与Console.Readline()时没有执行某些操作?请注意我只是在测试/开发,但我试着了解它有什么区别?我总是在印象a)和b)是同一个,它中断代码执行。
答案 0 :(得分:3)
Console.Readline()
不会中断执行,只是等待来自用户的输入。应用程序中的其他线程继续正常运行。
断点实际上会停止执行,以允许您查看应用程序的状态。在这种状态下,所有线程都暂停,因此没有任何东西可以响应端口8080。
您可以打开命令提示符并键入nestat -a
,在这种情况下,您应该在任一情景中看到有一个进程侦听端口8080.