线程.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()来防止主线程在其他派生线程结束之前结束?

线程.Join vs . task,等等

有几个不同之处,但回答您的问题的重要部分是线程池使用后台线程,并且这些线程不会阻止进程退出。

t.wait()无法在任务已经启动后使用。