.NET多线程发展历程简介

多线程无论是哪种支持多线程的高级语言都是重中之重,从某种意义上讲,多线程可以提供应用程序的运行效率,尤其是多CPU时代。在.NET1.0就出现了多线程Thread,再到.NET4.5的语法糖await async,每次多线程的新功能都是对上一版本多线程功能的提升和改进(并不是替代),让多线程越来越容易上手,效率也越来越高。多线程也是面试常考的话题之一,几个版本的多线程都会考到。本文将简介.NET多线程的发展历程,以及它们的优缺点。下图为发展历程。.

.NET多线程发展历程简介

.NET多线程发展历程

1、Thread

   Thread是.NET Frameworkd 1.0版本就有的功能,命名空间:System.Threading。

优点:提供了丰富的多线程操作API

缺点:线程个数的使用不能限制,同时创建多个容易死机,以及无法复用线程等。

使用案例:

class Program    {        static void Main(string[] args)        {            //创建一个实例执行            ThreadTest test=new ThreadTest();            //调用test实例的MyThread方法            Thread thread = new Thread(new ThreadStart(test.MyThread));            //启动线程            thread.Start();            Console.Read();        }    }
    class ThreadTest    {        public void MyThread()        {            Console.WriteLine("这是一个方法实例");        }    }

2、ThreadPool

    ThreadPool线池是.NET Frameworkd 2.0推出的新特性,它的出现从某种意义上来将改进了Thread的缺点。

优点:解决了线程个数的限制以及线程的复用,避免重复申请和释放

缺点:在线程顺序控制方面不好用,API较少而且线程等待问题解决起来较为麻烦。

使用案例:

static void DoSomething(object value){    Console.WriteLine(value);}//调用简写ThreadPool.QueueUserWorkItem(e =>{    DoSomething(e);}, "pram1");

可以设置线程数量最大值,但必须大于其CPU核数,否则无效。

3、Task
    Task是.NET Frameworkd 3.0推出的新特性,被称为线程最佳实践,API也最多,Task的背后的实现也是使用了线程池线程。

优点:丰富的API,以及多线程的管理方便

缺点:线程数量控制较为麻烦,这个在Parallel得到了改进,Parallel可以启动多线程。

使用案例:

var testTask = new Task(() => {        Console.WriteLine("task start"); });//这种必须Start  testTask.Start();  var factoryTeak = Task.Factory.StartNew(() =>   {       Console.WriteLine("factory task start");  });  Task.Run(() => { Console.Write("aaaaa"); });
4. await async
    await async是.NET4.5的新特征,是C#的语法糖,在.NET Core以上版本发扬光大了,可以说无处不在。它让程序员使用后端异步更加方便快捷。这里就不列出优缺点了,反正它是最好用的,现在.NET6都在大量使用。

使用案例:

 public ActionResult Index()        {            var t = Test();            var i = t.Result;            return View();        }        public async Task<int> Test()        {            return await Task.Run(() =>            {                var i = 0;                i++;                return i;            });        }

5、结语

    本文讲述了.NET多线程技术的发展历程以及它们各自的优缺点,并且列出了使用案例,仅供参考。希望本文对你有所帮助,欢迎大家留言讨论或者提出异议。