小编Rem*_*din的帖子

当线程已经终止时,Thread.Join 方法并不总是返回相同的值 (.NET 5 / Core)

Thread.Join方法具有三个重载:Join(),Join(Int32)Join(TimeSpan)。对于这三个重载中的每一个,Microsoft doc 中有以下声明:

如果调用 Join 时线程已经终止,则该方法立即返回。

虽然此语句对Join()重载有意义,但它没有指定为Join(Int32)和返回哪个值Join(TimeSpan),因此我Int32在两种不同的环境中测试了重载:

  1. Windows 10:返回
  2. Linux/Docker:返回false(在 Docker 桌面上使用mcr.microsoft.com/dotnet/runtime:5.0

请注意,如果线程在调用时仍在运行并在调用终止,则 Linux/Docker 实现将返回true(如 Windows 实现)。如果线程在调用之前终止它只会返回falseJoin

在我看来,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)

c# multithreading .net-core

10
推荐指数
1
解决办法
246
查看次数

标签 统计

.net-core ×1

c# ×1

multithreading ×1