【发布时间】:2012-11-20 15:17:06
【问题描述】:
我有一个在 Visual Studio 2012 中创建并一直在使用的 MVC 3 C# 项目。我也在使用实体框架。调试时,我得到已知的“自上一步以来进程或线程已更改”。调试图标上的消息。有一段时间,它并没有改变程序的行为,所以我忽略了它。
然而,最近,我收到了相同的消息和行为(调试器跳回到断点所在的已执行方法的开头),只是现在我的代码实际上被执行了两次。我的意思是现在任何数据库插入都至少运行两次。知道我也在使用实体框架可能会有所帮助,并且我的插入都是通过导入一个执行简单插入的存储过程来完成的。
在我的代码中,我没有明确地启动新线程或尝试执行任何多线程。我对多线程不是很熟悉,但是当我调试和使用线程窗口时,我看到一个主线程有7个线程,还有两个工作线程。 (对不起,我会发布一张图片,但我是新用户,他们不会让我这样做)。
然后,当我按F5继续时,我的单断点又被击中,我看到一个主线程,3个线程,6个!!工作线程。
我在哪里可以查看在哪里/为什么有多个线程正在启动?另外,自上一步消息以来,我可以做些什么来改变流程?我已经研究了几个星期,但没有解决方案。
提前感谢您的帮助!
【问题讨论】:
-
您使用的是 TPL 吗?您是否正在异步调用某些方法?您是否有任何由于某些 SVC 调用而执行的回调?
-
线程是否可能来自客户端,例如浏览器对您的操作进行多次异步调用?
-
@JustinHarvey 就是这样。
-
@DHN 不,我没有使用 TPL 或任何异步方法。我认为我看到的多个线程只是来自浏览器。我实际上有多个问题正在发生。我解决了最重要的问题,所以我会发布解决方案并将其标记为已回答。
标签: c# multithreading asp.net-mvc-3 entity-framework visual-studio-debugging