1 System.Threading.Tasks.Task简介
一个Task表示一个异步操作,Task的创建和执行是独立的。
只读属性:
![f20ac5b031f0b472a8d8fe7382c9bff3.png](https://img-blog.csdnimg.cn/img_convert/f20ac5b031f0b472a8d8fe7382c9bff3.png)
2 Task状态和生命周期
一个Task实例只会完成其生命周期一次,当Task达到它的3种可能的最终状态之一时,它就再也回不去之前的状态了。任务的生命周期从TaskStatus.Created状态真正开始。
1) 初始状态:
Task实例有三种可能的初始状态
![a5e18304d6136049428e9a71bbf371fb.png](https://img-blog.csdnimg.cn/img_convert/a5e18304d6136049428e9a71bbf371fb.png)
2)中间状态:
Task实例有两种可能的中间状态
![e7bb40359b8aa0240bf046aa134693f7.png](https://img-blog.csdnimg.cn/img_convert/e7bb40359b8aa0240bf046aa134693f7.png)
3) 最终状态:
Task实例有三种可能的最终状态
![792da5066cf1748f71238dee1461d108.png](https://img-blog.csdnimg.cn/img_convert/792da5066cf1748f71238dee1461d108.png)
3 创建并执行任务
1)public Task StartNew(Action action)
参数:
action:要异步执行的操作委托
返回值:
已启动的 System.Threading.Tasks.Task
异常:
System.ArgumentNullException:当 action 参数为 null 时引发的异常。
2)public static Task Run(Action action)
参数:
action:表示在线程池执行的队列的任务
返回值:
已启动的 System.Threading.Tasks.Task
异常:
System.ArgumentNullException:当 action 参数为 null 时引发的异常。
3)public void Start()
启动 System.Threading.Tasks.Task,并将它安排到当前的 System.Threading.Tasks.TaskScheduler中执行。
异常:
System.ObjectDisposedException:已释放 System.Threading.Tasks.Task 实例。
System.InvalidOperationException:System.Threading.Tasks.Task 未处于有效状态,无法启动。 它可能已启动、已执行或已取消,或者可能已经不支持以直接计划的方式创建。
注意:
仅使用Task的构造器来创建Task的实例并不能启动任务,还要使用Start才能启动任务。
4)Task.Factory.StartNew与Task.Run