我将应用程序从Windows上的C#转换为在具有Ryder IDE框架的Linux上运行的.Net Core
。
我们的应用程序使用了多个第三方框架,例如ServiceStack,RabbitMq
和Mailkit
库。
当我打开“调试输出”窗口时,我看到系统正在以每秒10多个的速度启动和停止线程。
Started Thread 18213
Exited Thread 18213
Started Thread 18214
Exited Thread 18214
Started Thread 18215
Exited Thread 18215
Started Thread 18216
Exited Thread 18216
Started Thread 18217
Exited Thread 18217
Started Thread 18218
由于有100多个类,所以我不知道从哪里开始看看哪个方法已启动并以这种速率停止线程。
我该如何追踪?
在线程池上是否存在我可以重载的方法,该方法允许我们在这些线程启动和停止时设置断点。
我尝试启用settings > Build, Execution > Debugger > Process exceptions outside of my code
,并且我看到 RabbitMQ 库中引发了许多异常,但是我不知道这是否与线程循环有关问题。
我启用了System.Treading.ThreadStartExcepton
,但没有被点击。
任何帮助将不胜感激。
答案 0 :(得分:1)
欢迎使用线程池.Net Core
并通常进行异步等待。
您在这里遇到什么问题?
这些输出Started Thread
和Exited Thread
并不是代码中的错误,而是由Asp.Net Core框架设计的
线程池是可以按需使用的工作线程池 如所须。 article中的代码示例显示了如何使用 .NET Core中使用C#的线程池。
答案 1 :(得分:1)
不幸的是,没有机制可以跟踪.NET应用程序中正在启动或停止线程的内容。如果在调试器中检查线程,则可以看到该线程的调用堆栈,包括(在堆栈的底部)启动该线程开始工作的方法。这可能会给您一些有关线程应该做什么的信息。
现实是,如果不是您的代码,那么您可能无法对这些线程的管理方式做很多事情。您可能看到的是.NET线程池的正常行为。除非您看到线程数量过多或线程转换率很高的问题,否则最好不要拉该线程。