该Thread.Join方法具有三个重载:Join(),Join(Int32)和Join(TimeSpan)。对于这三个重载中的每一个,Microsoft doc 中有以下声明:
如果调用 Join 时线程已经终止,则该方法立即返回。
虽然此语句对Join()重载有意义,但它没有指定为Join(Int32)和返回哪个值Join(TimeSpan),因此我Int32在两种不同的环境中测试了重载:
请注意,如果线程在调用时仍在运行并在调用后终止,则 Linux/Docker 实现将返回true(如 Windows 实现)。如果线程在调用之前终止,它只会返回false。Join
在我看来,Join无论平台如何,都应该始终返回 true,那么什么可以解释这种不一致的行为呢?我错过了什么还是.NET 5 错误?
更新
正如@txtechhelp 所建议的,这是一个 .NET Fiddle,其中包含我正在测试的确切代码。
如果我在 Windows 10(或 .NET Fiddle)上运行此代码,我会得到以下结果:
Starting..
Sleeping 1200..expect T1 end before join
In T1
Leaving T1 …Run Code Online (Sandbox Code Playgroud)