CLR via C# 读书笔记 13 前台线程和后台线程

前台线程(Foreground)

后台线程(Background)

相互作用:

  当所有前台线程退出的时候, CLR会强制终止所有的后台线程,并且不会有异常抛出

请参考以下代码(摘自CLR via C# ):

代码
using System;
using System.Threading;
public static class Program
{
public static void Main()
{
// Create a new thread (defaults to foreground)
Thread t = new Thread(Worker);
// Make the thread a background thread
t.IsBackground = false;
t.Start();
// Start the thread
// If t is a foreground thread, the application won't die for about 10 seconds
// If t is a background thread, the application dies immediately
Console.WriteLine("Returning from Main");
}
private static void Worker()
{
Thread.Sleep(
10000); // Simulate doing 10 seconds of work
// The line below only gets displayed if this code is executed by a foreground thread
Console.WriteLine("Returning from Worker");
}
}

转换

  你可以在任何时候转换前台线程为后台线程,或者反过来. 只要线程还活着

默认值:

  主线程默认是前台线程

  线程池默认是后台线程

  新建的默认是后台线程

何时使用?

  非关键性事务或者可恢复性质的事务,可以使用后台线程

PS1:实际上用前台线程的情况并不多,因为实际上还要考虑用户直接干掉整个进程的情况

PS2:在服务器压力很大或者服务器有某种不可预知缺陷的情况下,后台线程出问题的几率会比前台线程大(例如莫名其妙不运行啦 什么的)  ,  这条只是个人意见 没有经过非常严格的检验

原文地址:https://www.cnblogs.com/PurpleTide/p/1875838.html