.NET Framework 4.0 看(本质论第3版)
.NET Framework 4.5 看(本质论第4版)
.NET 4.0为多线程引入了两组新API:TPL(Task Parallel Library,任务并行库)和PLINQ(Parallel LINQ,并行LINQ)。
18.1 独立线程的运行和控制
通过 System.Threading.Tasks.Task 类在托管代码中公开各种API,该类代表的是一个异步操作。然而,一个 Task 并不直接映射到一个非托管线程。相反, Task 为底层的非托管线程构造提供了一定程度的抽象。
不是每次创建安一个 Task 时会创建一个线程。相反, Task 会从线程池请求一个线程。线程池针对 Task 请求,会判断是否需要创建一个全新线程,还是分配一个现有的线程。
通过将线程概念抽象为 Task ,开发人员不必操心何时创建一个新的操作系统线程,何时重用一个现有线程。换言之,降低了高效管理线程所涉及的复杂性。
编写 Task 时,需要分配希望 Task 执行的一组指令,然后启动 Task 。指令的分配基本上都靠委托。 |
- class Program
- {
- static void Main(string[] args)
- {
- const int Repettitions = 10000;
- Task task = new Task(() =>
- {
- for (int count = 0; count < Repettitions; count++)
- {
- Console.Write(‘-‘);
- }
- });
- task.Start();
- for (int count = 0; count < Repettitions; count++)
- {
- Console.Write(‘+‘);
- }
- task.Wait();
- }
- }
程序在声明了Task之后,执行了一个Start()调用。除非执行这个调用,否则为Task指定的Action是不会开始执行的。
task.Wait()调用强迫主线程(正在执行的第2个for循环线程)停止,并“等待”分配给task的所有工作执行完。
时间: 2024-11-06 08:15:38