• Swift新async/await并发模型中子任务取消不能被其它子任务感知的原因及解决


    在这里插入图片描述



    问题现象

    Swift 5.5 新引入的 async/await 并发模型,使用结构化并发(Structured Concurrency)模式,极大地改变了Swift并行代码开发的游戏规则。

    了解 async/await 并发模型的小伙伴们都知道,Swift本质上是将并发任务转换为继承体系中的Task组来实现结构化并发的。

    其中,关于Task和其子任务的一个特性是:当同一个Task中的任意子任务抛出异常或取消时,其它子任务都可以感知到这一行为:

    If one of your child tasks throws an uncaught error, all remaining tasks will be implicitly cancelled.

    子任务可以通过检查 Task.isCancelled 值或调用 Task.checkCancellation() 方法来完成感知。

    不过,该特性触发需要一个隐藏条件,在本篇博文中我们就来详细讨论下如何让子任务取消可以被其它兄弟子任务所感知吧。

    废话少叙,Let’s do it! 😉



    问题分析

    1. 无法被感知的取消

    首先,我们来看一下所有子任务都正常结束的情况,如下,我们分别创建了 task1() 和 task2() 两个子任务,它们都返回字符串类型:

    
                    
  • 相关阅读:
    Android UI 冻结处理方法
    重编译 microsip 和 pjsip 支持 mp3 录音
    Linux PCIe驱动框架分析(第三章)
    【学习笔记03】node.js搭建一个简易的服务器
    docker
    Vue_el挂载点
    斐波那契数
    自动气象站和气象信息网络
    VMWare Ubuntu压缩虚拟磁盘
    Servlet 学习笔记3
  • 原文地址:https://blog.csdn.net/mydo/article/details/126424963