【发布时间】:2023-03-17 10:35:01
【问题描述】:
我有一个 VB.NET 应用程序,它使用线程异步处理“计划任务”(控制台应用程序)中的某些任务。
我们将这个应用程序限制为一次运行 10 个线程,如下所示:
(伪代码)
- 创建一个包含 10 个线程的通用列表
- 为每个生成线程过程
- 为每个线程执行thread.join 语句以等待运行时间最长的线程完成。
我发现如果 threadproc 调用的代码包含任何“Debug.Writeline”或“Trace.Traceinformation”语句,线程就会挂起。我可以在 Debug - Windows - Threads 窗口中看到线程并切换到它,但它会突出显示 Debug.Writeline 语句并且永远不会超过它。
Debug 或 Trace 语句有什么特别之处使它们成为非线程安全的吗?
为什么这会挂掉?如果我留下调试语句,线程永远不会完成。如果我去掉调试语句,线程会在不到 5 秒的时间内完成。
【问题讨论】:
-
能否提供触发挂起的代码? Debug 和 Trace 类是线程安全的,所以这很奇怪。
标签: vb.net multithreading