gpt4 book ai didi

c# - Thread.Sleep(0) 和 Join() 的使用

转载 作者:行者123 更新时间:2023-11-30 13:30:56 30 4
gpt4 key购买 nike

我正在读一本关于多线程程序的书,我发现了这个小例子:

public static class Program
{
public static void ThreadMethod()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(“ThreadProc: {0}”, i);
Thread.Sleep(0);
}
}
public static void Main()
{
Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Start();
for (int i = 0; i < 4; i++)
{
Console.WriteLine(“Main thread: Do some work.”);
Thread.Sleep(0);
}
t.Join();
}
}

我脑子里有太多问题:

1) Thread.Sleep(0) 有什么用,我的意思是,我已经尝试了两种情况:有或没有 Thread.Sleep(0) , 运行时没有太大区别

2) t.Join() 在这里真的有用吗,因为它在 Main 方法的末尾?

最佳答案

Thread.Sleep(0)将屈服于优先级不低于您的其他线程:

If the value of the millisecondsTimeout argument is zero, the thread relinquishes the remainder of its time slice to any thread of equal priority that is ready to run. If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

所以在这个例子中,它试图让线程以大致相同的速度运行。

Thread.Join用法表明在你的线程完成它们的工作之前不需要结束你的程序。然而,作为Scott Chamberlain指出,默认IsBackground属性为 false,因此您的线程是前台 线程,并且将保持程序自行运行,直到它们完成工作。如果您的程序有更多事情要做,而且通常有,需要线程工作的结果,那么 Join 调用就真的很重要。

尝试将 IsBackground 属性设置为不同的值,并尝试删除 Join 调用以查看会发生什么。

关于c# - Thread.Sleep(0) 和 Join() 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25048239/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com