一:Task(在.net 4.0版本使用)
- Task=>Thread+ThreadPool
 - Thread:容易造成时间+空间开销,而且使用不当,容易造成线程过多,导致时间片切换
 - ThreadPool:控制能力比较弱,做Thread的延续,阻塞,取消,超时等等功能。控制权在CLR,而不是在我们手上。
 
Task是基于ThreadPool的基础上进行的封装,.net4..0之后,微软主推Task做异步启动。
二:Task的启动方式
1.实例化启动
1  | Task task = new Task(() =>  | 
2.工程模式(Task.Factory启动)
var task = Task.Factory.StartNew(() =>
{
    Console.WriteLine("我是工作线程,tid={0}", Thread.CurrentThread.ManagedThreadId);
});3.使用Task的Run方法
1  | var task = Task.Run(() =>  | 
4.同步(阻塞线程,同步执行)
1  | var task = new Task(() =>  | 
三:Task是建立在ThreadPool
实例化Task在Windgb下的状态:

同步(阻塞线程,同步执行)在Windbg下的状态:

很明显看出:
- Task的底层就是ThreadPool,ThreadPool分配了2个线程,属于CLR所有
 - 同步就没有其他线程,当线程执行完,才执行主线程
 
Task底层都是由不同的TaskScheduler支撑的
TaskScheduler相当于Task的CPU处理器
默认的TaskScheduler是ThreadPoolTaskScheduler
四:Task具有返回值
var task = new Task<string>(() =>
{
    return "Hello Word!";
});
task.Start();
Console.WriteLine(task.Result);