码迷,mamicode.com
首页 > 编程语言 > 详细

《C#本质论》读书笔记(18)多线程处理

时间:2016-12-22 13:54:59      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:port   sha   技术   otto   第3版   font   container   parallel   frame   

.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 。指令的分配基本上都靠委托。
      
  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         const int Repettitions = 10000;  
  6.         Task task = new Task(() =>  
  7.         {  
  8.             for (int count = 0; count < Repettitions; count++)  
  9.             {  
  10.                 Console.Write(‘-‘);  
  11.             }  
  12.         });  
  13.         task.Start();  
  14.         for (int count = 0; count < Repettitions; count++)  
  15.         {  
  16.             Console.Write(‘+‘);  
  17.         }  
  18.   
  19.         task.Wait();  
  20.     }  
  21. }  
技术分享
程序在声明了Task之后,执行了一个Start()调用。除非执行这个调用,否则为Task指定的Action是不会开始执行的。
task.Wait()调用强迫主线程(正在执行的第2个for循环线程)停止,并“等待”分配给task的所有工作执行完。









《C#本质论》读书笔记(18)多线程处理

标签:port   sha   技术   otto   第3版   font   container   parallel   frame   

原文地址:http://www.cnblogs.com/tangge/p/6210535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!