C# 为什么线程2不可用?
在下面的小控制台应用程序中,我正在打印主线程Id和其他5个线程,它正在打印1、3、4、5、6、7,但不是2。线程2是否不可用?该编号是如何生成的C# 为什么线程2不可用?,c#,threadpool,C#,Threadpool,在下面的小控制台应用程序中,我正在打印主线程Id和其他5个线程,它正在打印1、3、4、5、6、7,但不是2。线程2是否不可用?该编号是如何生成的 static void Main(string[] args) { Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}"); Enumerable.Range(0, 5).ToList().ForEach(f =>
static void Main(string[] args)
{
Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}");
Enumerable.Range(0, 5).ToList().ForEach(f =>
{
new Thread(() =>
{
Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(1000);
}).Start();
});
Console.ReadLine();
}
线程1
线程3
线程4
螺纹5
螺纹6
线程7
Id=2的线程是垃圾收集器线程。您可以通过运行终结器来检查其Id:
class Test
{
~Test()
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
}
}
static void Main(string[] args)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
var test = new Test();
test = null;
GC.Collect();
}
印刷品:
1
2
Id=2的线程是垃圾收集器线程。您可以通过运行终结器来检查其Id:
class Test
{
~Test()
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
}
}
static void Main(string[] args)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
var test = new Test();
test = null;
GC.Collect();
}
印刷品:
1
2
尝试再次运行它。您可能会有其他结果:)每次都是相同的结果。我知道它应该不同,这是怎么发生的?试着再次运行它。您可能会有其他结果:)每次都是相同的结果。我知道它应该是不同的,这个编号是如何发生的?尽管正确,但请注意不要假设垃圾收集器线程总是2。据我所知,这一点无法保证。@ernodeweard我同意,在记录这一点之前,我们无法保证。尽管正确,但请注意不要假设垃圾收集器线程始终为2。就我所知,这一点没有任何保证。@ernodeweard我同意,我们不能保证,除非有记录在案。