那些知名的软件开发技术堆栈
简而言之,它会通过成员变量 activeTask 来保持对当前排序的追踪。无论何时开始一个新的排序,都立即对当前 activeTask 中的所有任务执行 cancelAndJoin 操作。这样会在开启一次新的排序之前就会把正在进行中的排序任务给取消掉。 使用类似于 ControlledRunner 这样的抽象实现来对逻辑进行封装是比较好的方法,比直接混杂并发与应用逻辑要好很多。 选择使用抽象来封装代码逻辑,避免混杂并发和应用逻辑代码。
注意: 这个模式不适合在全局单例中使用,因为不相关的调用方是不应该相互取消。 好了,这看起来还行,只需要在调用 repository 时在 sortPricesBy 内部禁用按钮就好了。 大部分情况下,这都是最佳解决方案,但是如果我们想在保持按钮可用的前提下解决 bug 呢?这样的话有一点困难,在本文剩余的部分看看该怎么做。 注意: 这段代码展示了从主线程启动的巨大优势,点击之后按钮立刻变得不可点了。但如果您换用了其他的调度程序,当出现某个手速很快的用户在运行速度较慢的手机上操作时,还是可能出现发送多次点击事件的情况。 并发模式 下面几个章节我们探讨一些比较高级的话题,如果您才刚刚接触协程,可以不去理解这一部分,使用禁用按钮这一方案就是解决大部分类似问题的最佳方案。 在剩余部分我们将探索在不禁用按钮的前提下,确保一次性请求能够正常运行。我们可以通过控制何时让协程运行 (或者不运行) 来避免刚刚出现的并发问题。 有三个基本的模式可以让我们确保在同一时间只会有一次请求进行:
当介绍完这三个方案后,您可能会发现它们的实现都挺复杂的。为了专注于设计模式而不是实现细节,我创建了一个 gist 来提供这三个模式的实现作为可重用抽象 。 方案 1:取消之前的任务 在排序这种情况下,获取新的事件后就意味着可以取消上一个排序任务了。毕竟用户通过这样的行为已经表明了他们不想要上次的排序结果了,继续进行上一次排序操作没什么意义了。 要取消上一个请求,我们首先要以某种方式追踪它。在 gist 中的 cancelPreviousThenRun 函数就做到了这个。
来看看如何使用它修复这个 bug: 医疗物联网的未来应用将是什么样? 随着越来越多地将云服务与AI结合使用,物联网设备变得越来越智能,不仅限于将数据从患者传输到医疗保健专业人员。例如,使用云服务进行数据分析的物联网设备智能葡萄糖监测系统和智能胰岛素笔。这两种技术不仅可以连续捕获有关葡萄糖水平的信息,而且还可以将数据上传到云服务或要分析的移动应用程序。根据分析结果,胰岛素泵可以为患者注射适当剂量的胰岛素。 另一个例子是使用智能保姆摄像机监视老年患者。这些智能摄像机可以识别出是否出现异常情况,例如,老人进了洗手间,但在短时间内没有出来。摄像机的另一个应用是用于跌倒检测,然后可以向紧急服务或护理人员发出警报。
人工智能将继续将许多传统的医疗物联网设备从数据收集点转换为可以促进与数据进行有意义的交互的智能设备。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |