【问题标题】:Debuging multiple threads in asp.net mvc 5 controller method在 asp.net mvc 5 控制器方法中调试多个线程
【发布时间】:2016-12-26 14:59:29
【问题描述】:

我正在开发一个项目(ASP.NET MVC 5),该项目在其业务逻辑方面可能存在一些竞争风险,特别是当两个用户几乎同时调用同一个控制器方法时会发生什么。

所以我决定通过在上述控制器方法中设置断点来测试这一点,然后我尝试通过从浏览器发送请求来击中该断点。然后我打开一个新标签并尝试再次加载我的网站,但问题是它没有加载。

在我释放断点之前,网站完全(所有页面)无响应。

在线程窗口中,我可以看到很少有未分配的工作线程,并且有一个线程卡在断点处。

我正在使用 Visual Studio 2015 社区。​​p>

这种行为正常吗?如果是这种情况,我应该如何解决我的问题?

【问题讨论】:

  • 调试会锁定所有线程,直到中断被释放。否则你将如何调试任何东西?
  • 它会一直停留在你的断点,直到你发布并且 IIS(实际上是站点)会接受这两个不同的请求。
  • @Liam 我对 c# 应用程序中的多线程仍然不是很熟悉,但我确信在 java(eclipse) 中只有遇到断点的线程才会停止(其他线程继续运行)。我认为这里是相似的。

标签: asp.net asp.net-mvc multithreading visual-studio debugging


【解决方案1】:

我认为您误解了这里的调试方式。 Visual Studio 正在做它应该做的事情。它会停止断点上的所有执行,直到您释放它。在真实的生产环境中,或者在没有断点的情况下进行调试时,您会看到它会同时返回到两者(据您所知,除非您是一些运行时间极长的操作,在这种情况下您应该使用异步/等待)。

实际上,它 (IIS) 会将请求排队并处理它们。

【讨论】:

  • 所以如果我理解正确,在我完成调试我的一个线程之前,IIS 不会将任务分配给其他工作线程?如果它只对请求进行排队,那就太糟糕了。
  • 调试器附加到工作进程(w3wp)。工作进程管理线程。 VS 在遇到断点时拖拽工作进程(和所有线程)。 IIS 使用工作进程来执行所有服务器端计算。实际上,与 .Net 的关系比 IIS 更重要。
  • 比赛条件很难被发现。顺便说一句,如果您不使用共享资源,那么它不会成为竞争条件
猜你喜欢
  • 2019-09-30
  • 2015-03-03
  • 2011-11-04
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多