本文转载自微信公众号《安迪阿辉》,作者阿辉。转载本文请联系安迪阿辉公众号。之前了解过线程池,知道它的好处很多。使用线程池可以让我们节省操作系统资源,同时减少并行开销。线程池可以认为是一个抽象层,它向程序员隐藏了使用线程的细节,让我们可以专注于处理程序逻辑而不是各种线程问题。但是并不代表我们所有的项目都使用线程池。其实它也有很多缺点。例如,我们需要自定义使用异步委托的方式在线程中传递消息或异常。如果这些在一个大型的软件系统中,软件结构会太乱,线程之间传递消息。如果出现未处理的异常,很容易导致软件出现致命错误。为了解决这个问题,.NetFramework4.0中引入了一个新的异步操作API,叫做TaskParallelLibrary(TPL)。那么接下来,我们就来认识一下这个TPL,看看它有什么魔力来解决线程池中的棘手问题。任务并行库TPL被认为是线程池的抽象,对程序员隐藏了线程池交互的底层代码,只提供更方便的细粒度API。TPL的核心是使命。任务表示可以以多种方式运行的异步操作,有或没有单独的线程。TPL的一个关键优势是任务可以通过多种方式与其他任务组合。例如,可以同时启动多个任务,等待所有任务完成,然后运行一个任务,对之前所有任务的结果进行一些计算。AggregateException可用于捕获底层任务中的所有异常,并允许单独处理它们。C#5.0内置了对TPL的支持,允许我们使用await和async关键字以流畅舒适的方式操作任务。1.创建任务您可以通过以下三种方式创建任务。vara1=newTask(()=>TastMethod("Thread01"));a1.Start();Task.Run(()=>TastMethod("Thread001"));//废弃的Task.Factory.StartNew(()=>TastMethod("线程02"));Task.Factory.StartNew(()=>TastMethod("线程03"),TaskCreationOptions.LongRunning);控制台.ReadKey();在最新的.NET5.0中,任务快速启动方法Run已被废弃。只有剩下的两个可以使用。必须在执行任务之前启动实例化的Tast属性。.NET的其余部分已经内置,只要使用它就会默认自动启用。在线程3的开启过程中,添加了TaskCreationOptions.LongRuning参数,表示该任务被标记为长时间运行。因此,该任务不会使用线程池,而是在单独的线程中运行。但是,根据当前运行任务的任务调度程序,它可能会以不同方式运行。2、使用tasks进行基本操作下面介绍从tasks获取的计算方法返回的结果。staticvoidMain(string[]args){vara1=newTask
