Thread.Join 与 Task.Wait

Mon*_*mer 6 c# multithreading task

考虑以下代码。

线

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.");
}
Run Code Online (Sandbox Code Playgroud)

任务

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.");
}
Run Code Online (Sandbox Code Playgroud)

使用时Task,我们需要t.Wait()在主线程结束之前等待线程池线程完成,但使用时Thread,我们不需要t.Join得到相同的效果。

为什么t.Join()不需要阻止主线程在其他生成的线程结束之前结束?

Ami*_*mit 4

有几个区别,但回答您的问题的重要部分是线程池使用后台线程,并且这些线程不会阻止进程退出。你可以在这里阅读更多。

  • 我宁愿说阅读更多内容[此处](https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&amp;l=EN-US&amp;k=k(System.Threading.Thread.IsBackground);k(TargetFrameworkMoniker- .NETFramework,版本%3Dv4.6.1);k(DevLang-csharp)&amp;rd=true) (2认同)