【问题标题】:Thread.Join versus Task.WaitThread.Join 与 Task.Wait
【发布时间】:2016-10-13 18:44:37
【问题描述】:

考虑下面的代码。

线程

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

【问题讨论】:

  • 现在将 Thread 的 IsBackground 属性设置为 true 并再次测试......
  • @L.B:好点子!
  • 第一个示例(使用 Thread 类)一直等到线程完成,因为默认情况下,与 Task 不同,Thread 不在后台运行。 Task 基于线程池的概念,天生就在后台运行。

标签: c# multithreading task


【解决方案1】:

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

【讨论】:

  • 我宁愿说阅读更多here
【解决方案2】:

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

【讨论】:

  • t 是什么?是Task 还是Thread
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2016-09-28
  • 2023-03-03
相关资源
最近更新 更多