betway必威-betway必威官方网站
做最好的网站

异步编程

一、线程

1.1 主线程

.net使用main()方法做为程序的入口点,当调用该方法,主线程被创建。

1.2 工作者线程

由主线程创建的线程被称为工作者线程,用于去执行某一项具体的任务。

1.3 前台线程

默认情况下Thread.Start()创建的线程都是前台线程,前台线程可以阻止应用程序的终结,即所有的前台线程执行完成之后CLR*才能关闭应用程序。

前台线程属于工作者线程

1.4 后台线程

后台线程不影响应用程序的终结,所有的前台线程执行完成之后,无论后台线程是否执行完成,应用程序都会关闭。

后台线程一般用于处理一些无关紧要的任务(比如邮箱每隔一段时间检查一遍邮箱等)。后台线程属于工作者线程。

图片 1图片 2

 1      static void Main(string[] args)
 2         {
 3             Console.WriteLine("主线程开始");
 4             Thread t1 = new Thread(Task1);
 5             t1.Start();
 6 
 7             Thread t2 = new Thread(Task2);
 8             t2.IsBackground = true;  //后台线程
 9             t2.Start();
10         }
11 
12         public static void Task1()
13         {
14             Thread.Sleep(1000);   
15             Console.WriteLine("前台线程开始");
16         }
17 
18         public static void Task2()
19         {
20             Thread.Sleep(3000);
21             Console.WriteLine("后台线程开始");
22         }

View Code

以上代码运行结果如下图所示,由此可以看出前台线程执行完成之后,应用程序关闭。未输出“后台线程开始”,后台线程未执行。

图片 3

图片 4图片 5

 1     static void Main(string[] args)
 2         {
 3             Console.WriteLine("主线程开始");
 4             Thread t1 = new Thread(Task1);
 5             t1.Start();
 6 
 7             Thread t2 = new Thread(Task2);
 8             //t2.IsBackground = true;  //后台线程
 9             t2.Start();
10         }
11 
12         public static void Task1()
13         {
14             Thread.Sleep(1000);   
15             Console.WriteLine("前台线程开始");
16         }
17 
18         public static void Task2()
19         {
20             Thread.Sleep(3000);
21             Console.WriteLine("后台线程开始");
22         }

View Code

以上代码运行结果如下图所示,两个线程都为前台线程,两个线程全部执行完成之后,应用程序关闭。

 图片 6

异步编程,c#异步编程

二、线程池

线程池是为突然大量爆发的线程设计的,通过有限的几个固定的线程为大量的操作服务,减少了线程创建和销毁的时间,从而提高效率。

ThreadPool使用与并发运行若干个任务且运行时间不长且互不干扰的场景。ThreadPool创建的线程为后台线程。

图片 7图片 8

 1 static void Main(string[] args)
 2         {
 3             Console.WriteLine("主线程开始!");
 4             //创建要执行的任务
 5             WaitCallback workItem = state => Console.WriteLine("当前线程Id为:"   Thread.CurrentThread.ManagedThreadId);
 6             //重复调用10次
 7             for (int i = 0; i < 10; i  )
 8             {
 9                 ThreadPool.QueueUserWorkItem(workItem);
10             }
11             Console.ReadLine();
12         }

View Code

以上代码运行结果如下图所示,由此可见并不是每次执行任务都创建一个新的线程,是在循环利用线程池中维护的线程。如果去掉最后一句, Console.ReadLine(),仅输出“主程序开始”就直接退回,可知线程池创建的线程为后台线程。

图片 9

 

 持续维护中.......

 

 

 

 

 

CLR:

线程同任务的区别

async await的使用,什么时候使用,作用是什么

 

一、线程

1.1 主线程

.net使用main()方法做为程序的入口点,当调用该方法,主线程被创建。

1.2 工作者线程

由主线程创建的线程被称为工作者线程,用于去执行某一项具体的任务。

1.3 前台线程

默认情况下Thread.Start()创建的线程都是前台线程,前台线程可以阻止应用程序的终结,即所有的前台线程执行完成之后CLR*才能关闭应用程序。

前台线程属于工作者线程

1.4 后台线程

后台线程不影响应用程序的终结,所有的前台线程执行完成之后,无论后台线程是否执行完成,应用程序都会关闭。

后台线程一般用于处理一些无关紧要的任务(比如邮箱每隔一段时间检查一遍邮箱等)。后台线程属于工作者线程。

图片 10

 1      static void Main(string[] args)
 2         {
 3             Console.WriteLine("主线程开始");
 4             Thread t1 = new Thread(Task1);
 5             t1.Start();
 6 
 7             Thread t2 = new Thread(Task2);
 8             t2.IsBackground = true;  //后台线程
 9             t2.Start();
10         }
11 
12         public static void Task1()
13         {
14             Thread.Sleep(1000);   
15             Console.WriteLine("前台线程开始");
16         }
17 
18         public static void Task2()
19         {
20             Thread.Sleep(3000);
21             Console.WriteLine("后台线程开始");
22         }

View Code

以上代码运行结果如下图所示,由此可以看出前台线程执行完成之后,应用程序关闭。未输出“后台线程开始”,后台线程未执行。

图片 11

图片 12

 1     static void Main(string[] args)
 2         {
 3             Console.WriteLine("主线程开始");
 4             Thread t1 = new Thread(Task1);
 5             t1.Start();
 6 
 7             Thread t2 = new Thread(Task2);
 8             //t2.IsBackground = true;  //后台线程
 9             t2.Start();
10         }
11 
12         public static void Task1()
13         {
14             Thread.Sleep(1000);   
15             Console.WriteLine("前台线程开始");
16         }
17 
18         public static void Task2()
19         {
20             Thread.Sleep(3000);
21             Console.WriteLine("后台线程开始");
22         }

View Code

以上代码运行结果如下图所示,两个线程都为前台线程,两个线程全部执行完成之后,应用程序关闭。

 图片 13

本文由betway必威发布于编程开发,转载请注明出处:异步编程

TAG标签: betway必威
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。