【发布时间】: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