.NET Framework提供了异步操做的三种模式:编程
基于任务的异步模式(Task-based Asynchronous Pattern,TAP)使用一个方法来表示异步操做的启动和完成。TAP是在.NET Framework4中引入的,而且它是.NET Framework中进行异步编程推荐使用的方法。C#中使用async与await关键字为TAP添加了语言的支持。数据结构
TAP是基于命名空间中的System.Threading.Tasks.Tassk
命名空间中的System.Threading.Tasks.Task
和System.Threading.Tasks.Task<TRresult>
类型,这些类型用于表示任意的异步操做。异步
TAP 中的异步方法在操做名称后包含 Async 后缀;例如,get 操做的 GetAsync。 若是你正在将 TAP 方法添加到已包含具备 Async 后缀的方法名称的类中,请改用后缀 TaskAsync。 例如,若是类具备 GetAsync 方法,请使用名称 GetTaskAsync。async
TAP 方法返回System.Threading.Tasks.Task
或 System.Threading.Tasks.Task<TResult>
,取决于相应的同步方法是返回 void 仍是类型 TResult。异步编程
TAP方法的参数不能是out与ref的。应将经过out或ref参数返回的全部数据改成做为Task
在某些状况下,完成操做所须要的工做量要比异步启动操做所需的工做量少。读取流时,按照在内存中已缓冲好的数据来知足读取,这类情形下操做可能会同步完成,同时返回已完成的任务。对象
TAP中,取消是异步方法实现者和异步方法使用者的选项。若是操做容许取消,则会公开接受取消标记(CancellationToken 实例)的异步方法的重载。 按照约定,该参数命名为 cancellationToken。该异步操做监视取消请求的此标记。若是它收到取消请求,则能够选择接受该请求并取消操做。若是取消请求到时过早的结束工做,则TAP方法返回一个Canceled状态下结束的任务,没有可用结果且不引起异常。Canceled状态被视为任务最终(完成)状态。所以,若是一个任务处于 Canceled 状态,则其 IsCompleted 属性将返回 true。事件
某些异步操做可能须要进度通知。与取消一下,仅在API支持进度同时,TAP实现才应提供IProcess
在计算密集型任务中,若是系统在开始运行任务以前收到取消请求,则它能够防止执行已计划的任务。一样,若是你提供一个取消标记(CancellationToken对象),则能够将标记传递给监视该标记的异步代码开发
当在等待Task时,await表达式的类型为void,等待Task