本文主要对async await 这种基于任务(Task)异步模式进行分析总结。简单理解同步是按顺序执行的但异步不影响主线程的使用异步调用异步线程。
async 异步
返回类型有 Task 、Task<TResult>、void 三种类型。通常包含 await 运算符的一个或多个实例,但缺少 await 表达式也不会导致生成编译器错误。 如果异步方法未使用 await 运算符标记暂停点,那么异步方法会作为同步方法执行,即使有 async 修饰符也不例外,编译器将为此类方法发布一个警告。
await 等待
返回类型有Task、Task<TResult> 和 System.Threading.Tasks.ValueType<TResult> 对象方法。await 只能在async 修饰符标记的封闭方法体、lambda 表达式或异步方法Task中出现。
异步方法同步运行,直至到达其第一个 await 表达式,此时await在方法的执行中插入挂起点,会将方法挂起直到所等待的任务完成,然后继续执行await后面的代码区域。
注意:
无法等待具有 void 返回类型的异步方法,并且无效返回方法的调用方捕获不到异步方法抛出的任何异常。
异步方法无法声明 in、ref 或 out 参数,但可以调用包含此类参数的方法。 同样,异步方法无法通过引用返回值,但可以调用包含 ref 返回值的方法。
主要参考如下,下面写的挺详细的: