• 异步回调方式的讨论


    很多时候需要异步操作来避免阻塞当前线程,而异步操作的结果需要通过回调告知调用者,而回调的方式有多种,且不同语言支持的情况也不一样。

    回调机制是在某个时间发生前准备好的一段代码,事件一旦发生,系就会执行相应的代码。因此回调有两个主要部分组成:(1)注册过程 (2)事件发生时需要执行的代码。

    实现回调机制的途径有一下几大类:

    1.注册对象和回调方法

       (1)目标-动作对:异步调用时,简单保存目标对象指针和其回调处理方法的指针,当异步操作结束后,被调用对象会通过二者找到回调的入口,并执行回调。

       (2) 委托机制:只需要保存目标对象的指针,而目标对象肯定实现了回调协议,即其回调处理方法是唯一的,明确的,因此仅通过目标对象,就能找到回调接口。当某个对象收到多个事件并要求同一个对象来处理所有的事件时,就可以使用委托机制了。

           (3)通告机制:类似于设计模式中的观察者模式(订阅者-发布者模式),多个监听对象中,每个对象都有一个回调入口(目标-动作对),他们监听的同一个异步事件,当异步完成时,它们会被一一回调。当需要多个对象(或者两个无关的对象)处理同一事件时,可以使用通告机制。

    2.继承回调类

      我们可以创建类A继承一个回调类(接口),并实现指定的回调方法,那么类A的对象就可以作为回调对象,这样在异步调用的时候不用注册对象和方法,而是直接传入一个回调对象即可。这种方式虽然在注册过程中方便,但是在准备回调代码时麻烦,因为不同类型的回调都要创建一个新类,导致代码膨胀。

    3.注册时实现回调

           此方式只是在使用回调的方式与其他几种不同,即允许你在调用异步接口的同时编写回调处理代码,即整合了回调的注册过程和准备回调代码的过程。这种方式适合处理简单快速的回调任务,帮助开发者写出短小精炼的代码。已知Object-C中的Block机制和Java中回调机制支持此方式。

  • 相关阅读:
    Jmeter错误解析-明明写对了,确报404,原因是接口里多了个空格
    Jmeter+ant+svn+jenkins一键部署(四)--机器人发报告
    Django
    Linux下压缩解压文件夹+下载+删除命令
    VUE-安装
    Hadoop核心-MapReduce
    Pulsar 社区周报|2021-06-14~2021-06-20
    ApacheCon Asia 2021: Apache Pulsar 技术议题一览
    Pulsar 社区周报|2021-06-07~2021-06-13
    直播回顾|TGIP-CN 032:Apache Pulsar 快速上手实战
  • 原文地址:https://www.cnblogs.com/guoxiaoqian/p/4338861.html
Copyright © 2020-2023  润新知