线程.Join vs . task,等等
本文关键字:等等 task vs Join 线程 | 更新日期: 2023-09-27 18:13:02
考虑以下代码:
线程static void Main(string[] args)
{
Thread t = new Thread(Foo);
t.Start();
Console.WriteLine("Main ends.");
//t.Join();
}
static void Foo()
{
for (int x = 0; x < 1000000000; x++) ;
Console.WriteLine("Foo ends.");
}
任务static void Main(string[] args)
{
Task t = new Task (Foo);
t.Start();
Console.WriteLine("Main ends.");
t.Wait();
}
static void Foo()
{
for (int x = 0; x < 1000000000; x++) ;
Console.WriteLine("Foo ends.");
}
当使用Task
时,我们需要t.Wait()
在主线程结束之前等待线程池线程完成,而当使用Thread
时,我们不需要t.Join
来获得相同的效果。
为什么不需要t.Join()
来防止主线程在其他派生线程结束之前结束?
有几个不同之处,但回答您的问题的重要部分是线程池使用后台线程,并且这些线程不会阻止进程退出。
t.wait()无法在任务已经启动后使用。