文章目录
- 测试
- 总结
- 拓展:js的async await
- 问题
- 参考
测试
来自微软官网的说法:
异步方法通常包含 await 运算符的一个或多个匹配项,但缺少 await 表达式不会导致编译器错误。 如果异步方法未使用 await 运算符标记悬挂点,则该方法将作为同步方法执行,不管异步修饰符如何。 编译器将为此类方法发布一个警告。
A.如图有两个方法都被async关键字修饰,其中EachProductionLinerejectRateThirdReport方法体里没有await
,GetMonthOutput反之。Test方法调用二者。
被async关键字修饰没有await会提示“此异步方法缺少await运算符,将以同步方式运行”EachProductionLinerejectRateThirdReport提示“不会等待”
EachProductionLinerejectRateThirdReport提示“不会等待”
总结
async关键字修饰的方法,没有await等运算符的修饰,方法将以同步的方式运行,只是会在被其他方法调用的时候如不加awaitIDE一样会提示”不会等待“
拓展:js的async await
async function语法
- 自动将常规函数转换成Promise,返回值也是一个Promise对象
- 只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数
- 异步函数内部可以使用await
async function name([param[, param[, … param]]]) { statements }
name: 函数名称。
param: 要传递给函数的参数的名称
statements: 函数体语句。
返回值: 返回的Promise对象会以async function的返回值进行解析,或者以该函数抛出的异常进行回绝。
await语法
- await 放置在Promise调用之前,await
强制后面点代码等待,直到Promise对象resolve,得到resolve的值作为await表达式的运算结果 - await只能在async函数内部使用,用在普通函数里就会报错
[return_value] = await expression;
expression: 一个 Promise 对象或者任何要等待的值。
返回值:返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
问题
只加async 不配合await那些会开线程么?
优先级相同的情况下,按线程分配资源 ,也看操作系统调用策略了,用线程跑理论上会获得更多cpu资源吧在线程池还够用的时候?
参考
使用 Async 和 Await 的异步编程(C# 和 Visual Basic)
async/await解析