当前位置: 首页 > news >正文

做seo要明白网站内容win主机安装wordpress

做seo要明白网站内容,win主机安装wordpress,网页平台设计,成都做网站建设suspend修饰符#xff0c;它可以告诉编译器#xff0c;该函数需要在协程中执行。作为开发者#xff0c;您可以把挂起函数看作是普通函数#xff0c;只不过它可能会在某些时刻挂起和恢复而已。协程的挂起就是退出方法#xff0c;等到一定条件到来会重新执行这个方法#x…suspend修饰符它可以告诉编译器该函数需要在协程中执行。作为开发者您可以把挂起函数看作是普通函数只不过它可能会在某些时刻挂起和恢复而已。协程的挂起就是退出方法等到一定条件到来会重新执行这个方法因为对方有这个协程的引用当然可以调用你的方法了。 普通函数不可以调用挂起函数。因为挂起函数有有一个隐形的参数Continuation普通方法没有办法传Continuation参数Continuation可以简单理解成java中的Callback。 suspend修饰的方法不一定真的可以挂起只要这个方法接收到COROUTINE_SUSPENDED结果就表示可以挂起了即退出方法。 // 一个普通方法 private fun doFun1() {println(doFun1) }// 一个suspend修饰的方法但是方法内没有挂起点方法体可普通方法一样但是多一个Continuation参数 private suspend fun doSuspendFun1(p1: Int) {println(doSuspendFun1) }// 方法中用了delay方法delay方法返回了COROUTINE_SUSPENDED // 表示doSuspendFun2方法在执行完delay方法后就会退出 private suspend fun doSuspendFun2(p1: Int, p2: Int) {delay(1000)println(doSuspendFun2) }fun main() {GlobalScope.launch {println(launch)doSuspendFun2(1, 1)} }launch方法的参数block就是一个suspend CoroutineScope.() - Unit类型的方法。 我们看下转换成java后的代码 doFun1方法没有什么变化 private static final void doFun1() {System.out.println(doFun1); }doSuspendFun1方法不仅多了一个参数Continuation还多了一个返回值Object类型这就是为什么普通函数不能调用挂起函数因为无法传递Continuation参数。返回值是Object因为可以返回COROUTINE_SUSPENDED也可以返回String返回值就是协程的返回值所以返回值的类型无法确定。因为内部没有使用挂起函数内部的逻辑就和普通方法一样就是多一个参数和一个返回结果。 private static final Object doSuspendFun1(int p1, Continuation $completion) {System.out.println(doSuspendFun1);return Unit.INSTANCE; }来看一下比较复杂的doSuspendFun2方法内部使用了delay方法。就会有挂起点所谓挂起点就是label很多文章叫这个为状态机。执行到一个挂起点label的值就会加1等下次恢复的时候switch就会知道从哪开始执行了。 private static final Object doSuspendFun2(int var0, int var1, Continuation var2) {// Continuation都是从上一个挂起函数中传进来的并不是当前对象所以才会重新创建new doSuspendFun2.1(var2)// 防止直接使用外面的的协程var2影响到var2。doSuspendFun2.1 $continuation;label20: {// if (var2 instanceof doSuspendFun2.1) {$continuation (doSuspendFun2.1)var2;if (($continuation.label Integer.MIN_VALUE) ! 0) {$continuation.label - Integer.MIN_VALUE;break label20;}}// 就是下面的 Test14Kt$doSuspendFun2$1$continuation new doSuspendFun2.1(var2);}Object $result $continuation.result;// 它的值就是 COROUTINE_SUSPENDEDObject var5 IntrinsicsKt.getCOROUTINE_SUSPENDED();switch ($continuation.label) {case 0:ResultKt.throwOnFailure($result);$continuation.getContext();// label加1$continuation.label 1;if (DelayKt.delay(1000L, $continuation) var5) {// delay返回 COROUTINE_SUSPENDED所以直接退出方法return var5;}break;case 1:ResultKt.throwOnFailure($result);break;default:throw new IllegalStateException(call to resume before invoke with coroutine);}System.out.println(doSuspendFun2);// 没有返回值默认就是 Unitreturn Unit.INSTANCE;} 协程中的Continuation这样理解成java中的Callback应该简单了吧 挂起方法doSuspendFun2最后被编译成一个对象继承ContinuationImpl final class Test14Kt$doSuspendFun2$1 extends ContinuationImpl {// $FF: synthetic fieldObject result;int label;Test14Kt$doSuspendFun2$1(Continuation $completion) {super($completion);}Nullablepublic final Object invokeSuspend(NotNull Object $result) {this.result $result;this.label | Integer.MIN_VALUE;return Test14Kt.access$doSuspendFun2(0, 0, (Continuation)this);} } suspend修饰的方法中如果使用了挂起函数并且挂起函数可以返回COROUTINE_SUSPENDEDjvm就会创建一个继承自ContinuationImpl的类这个类的invokeSuspend方法就是在执行这个挂起方法此时已经被转换成java的普通方法了。 我们再看看main函数里面的launch处的方法。 final class Test14Kt$main$1 extends SuspendLambda implements Function2 {int label;Test14Kt$main$1(Continuation $completion) {super(2, $completion);}Nullablepublic final Object invokeSuspend(NotNull Object $result) {Object var2 IntrinsicsKt.getCOROUTINE_SUSPENDED();switch (this.label) {case 0:ResultKt.throwOnFailure($result);System.out.println(launch);Continuation var10002 (Continuation)this;this.label 1;// 注意把当前对象传给 doSuspendFun2了这就是Continuation再传递 if (Test14Kt.access$doSuspendFun2(1, 1, var10002) var2) {// 如果doSuspendFun2方法返回COROUTINE_SUSPENDED也会退出invokeSuspend方法return var2;}break;case 1:ResultKt.throwOnFailure($result);break;default:throw new IllegalStateException(call to resume before invoke with coroutine);}return Unit.INSTANCE;}NotNullpublic final Continuation create(Nullable Object value, NotNull Continuation $completion) {return (Continuation)(new Test14Kt$main$1($completion));}Nullablepublic final Object invoke(NotNull CoroutineScope p1, Nullable Continuation p2) {return ((Test14Kt$main$1)this.create(p1, p2)).invokeSuspend(Unit.INSTANCE);} }suspend CoroutineScope.() - Unit会被编译继承SuspendLambda的一个类。
http://www.w-s-a.com/news/125047/

相关文章:

  • 网站积分的作用网站开发需要看相关书籍
  • 建设银行总行网站alexa排名与什么有关系
  • 阿里云服务器发布网站收款网站怎么建设
  • 开发东莞网站制作公司做网站优化步骤
  • 网站版权信息的正确写法如何制作网络游戏
  • 郑州移动端网站建设如何在网上推广自己的公司
  • 企业建站源码系统破解网站后台
  • 石家庄网站开发报价企业注册资本代表什么
  • 招商平台公司宁波seo教程推广平台
  • 哪些网站可以做房产推广垂直门户网站都有什么
  • 不得不知道的网站金石项目管理软件
  • 怎么恢复网站数据库网站开发作业代做
  • 哪里建设网站最好用中国第五冶金建设公司医院网站
  • 雄安网建 网站建设订餐网站建设
  • 广州视频网站建站公司网站 体系
  • 青浦门户网站网站推广烟台公司电话
  • 湖北荆门建设银行网站wordpress购物模板下载
  • 学ui+wordpress模板北京推广优化
  • 建分类网站得花多少钱深圳设计网站开发
  • 网站集群建设和网站集约化百度商桥怎么绑定网站
  • 青岛模板网站建设价格网络品牌网站建设
  • 网站建设的几大要素网站的做网站的公司
  • 怎么登陆自己的公司网站垂直电商网站建设
  • 温州微网站制作哪里有许昌网站建设哪家最好
  • 中国中小企业网站官网网页制作工具按其制作方式分 可以分为
  • 做资源下载网站违法吗河南企业做网站
  • 网站开发总体功能设计网站建设 北京昌平
  • 辽宁省高等级公路建设局网站书画院网站建设方案
  • 本地生活网站 源码重庆本地网站有哪些
  • 企业网站域名服务器国外html响应式网站