任务并行库(Task Parallel Library,TPL)可以被认为是线程池上的又一个抽象层,其对程序员隐藏了与线程池交互的底层代码,并提供了更方便的细粒度的API。
创建任务
using System; using System.Threading; using System.Threading.Tasks; namespace Chapter4.Recipe1 { class Program { static void Main(string[] args) { var t1 = new Task(() => TaskMethod("Task 1")); var t2 = new Task(() => TaskMethod("Task 2")); t2.Start(); t1.Start(); Task.Run(() => TaskMethod("Task 3")); Task.Factory.StartNew(() => TaskMethod("Task 4")); Task.Factory.StartNew(() => TaskMethod("Task 5"), TaskCreationOptions.LongRunning); Thread.Sleep(TimeSpan.FromSeconds(1)); } static void TaskMethod(string name) { Console.WriteLine("Task {0} is running on a thread id {1}. Is thread pool thread: {2}", name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); } } }
1. 使用构造函数创建任务,传入一个lambda表达式作为Action委托,调用Start()启动任务。
2. 使用Task.Run()运行任务,与使用构造函数创建任务不同,Task.Run()创建的任务会立刻开始执行,无需调用Start()
3.使用Task.Factory.StartNew()运行任务,与使用构造函数创建任务不同,Task.Run()创建的任务会立刻开始执行,无需调用Start()
4.标记任务为长时间操作,结果该任务将不会使用线程池,而在单独的线程中运行。