提问人:ericc 提问时间:10/5/2023 最后编辑:Theodor Zouliasericc 更新时间:10/5/2023 访问量:49
Thread.join 超时,即使委托显示为已完成
Thread.join times out even though delegate appears completed
问:
我正在调试其他人的 .NET Framework 4.8 C# 代码中的问题,该代码尝试使用 Activator.CreateTypeInstance 实例化第三方程序集中的类型,该程序集是从传递到后台 STA 线程的委托内部调用的。线程启动后,调用线程将在 Thread.join 上阻塞最多 60 秒。不要问我为什么在这里使用后台线程(代码已有 10 多年的历史),因为 Thread.Join 会消除任何并发优势。
在任何情况下,类型都会实例化并委托完成,但 Thread.Join 仍会等待 60 秒超时。在Visual Studio线程窗格中,当我在委托完成后但在超时结束之前使用调试器的“全部中断”时,我可以看到线程在线程窗格中被销毁,但Thread.Join仍在等待,所以我想知道是什么原因导致了这种行为?它是否与对 Activator.CreateInstance 的调用相关联,使一些剩余状态/句柄处于打开状态?
答:
0赞
B.Griffin
10/5/2023
#1
Thread.Join
在线程停止执行或分配的时间间隔过去之前不会返回。(参见:https://learn.microsoft.com/en-us/dotnet/standard/threading/destroying-threads)
我的猜测是,即使委托正在完成,它也没有完成线程,因此会一直等待,直到它超时。Thread.Join
评论