Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Posted 大熊猫侯佩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题相关的知识,希望对你有一定的参考价值。

概览

使用Swift 5.5中新并发模型时,在有些情况下我们希望隔离特定一段代码片段的执行,防止数据竞争(Data Race)。这往往发生在代码流中有多个不同Actor执行的时候。

我们使用上面的App从网络服务器获取并显示所有emoji图片,并利用本地磁盘和内存两级缓存加速图片的显示速度。

在所有图片都已缓存到本地的情况下,浏览所有图片后,磁盘缓存和内存缓存数量应该相等。但从上图App底部状态栏看到的情况并不是这样,最后内存缓存数量竟然多于磁盘缓存数量。

这是怎么回事呢?

让我们从源代码开始一场探寻之旅吧!

Let’s go!

以上是关于Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题的主要内容,如果未能解决你的问题,请参考以下文章

Swift 两种方式实现 async/await 并发模型中任务超时(timeout)的处理

Swift 两种方式实现 async/await 并发模型中任务超时(timeout)的取消

Swift 两种方式实现 async/await 并发模型中任务超时(timeout)的取消

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

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

Swift 新并发框架之 async/await