美文网首页swift知识技巧搜集
WWDC21-认识Swift中的async/await

WWDC21-认识Swift中的async/await

作者: 行知路 | 来源:发表于2021-06-14 08:18 被阅读0次

一、实例对比

        假如我们需要从网络下载一个图片,并且把图片转换为缩略图;这两个操作都是耗时的操作,所以在下面的代码中使用了异步下载数据与异步创建缩略图的能力。

普通的函数
        如果你已经习惯于写这样的代码,或者从来么有想过这样的代码是否有问题。那么,你会认为这些代码没什么问题,就应该这样的,其实这段代码的可读性太差、对于一个这么简单的任务所需的代码量也是巨大的。
        针对返回值,我们可以使用Swift提供的Result类型来进行一些优化,消除第一个函数中潜在的逻辑表达瑕疵(如果不理解的话可以看看Swift为什么引入Result类型)。
稍微优化后的方法
        是时候展示一下最新的代码的样子了!请仔细看一下下面的代码!虽然有些代码你可能看不懂,但是这段代码与上面的代码相比,是不是简单很多很多很多!
async/await代码
        函数声明中的async标明这个函数时可以异步执行的——也就是说执行这段代码是可以不阻塞当前线程。然后再try await语句中,异步等待从网路请求数据完成。在最后一个await中,可以异步等待通过图片获取缩略图。
        请仔细阅读以上代码!也许你觉得这只是Swift引入了一些新的关键字、实现了一些新的能力,也不代表什么!其实这种代码的背后是有巨大的差异!非async/await代码,就像以前没有引入结构化程序设计时的代码一样,充满了goto(在这里指完成回调),这严重影响了代码的阅读,降低了人效!引入了async/let之后,把异步编码结构化了,使我们可以按照自然的思维习惯去实现功能、编写代码。进步是巨大的!

二、async/await分析

        除了上面代码所展示的——函数/方法可以是异步的,属性也可以是异步的。


异步属性

        在函数、属性和初始值设定项中,await 可用于表达式可以解除当前线程阻塞;除此之外,await还可以用于异步序列。


异步序列

        关于async/let的说明。


异步的特性
  • 当您将函数标记为异步时,您就允许它挂起。当一个函数挂起自己时,它也会挂起它的调用者。所以它的调用者也必须是异步的。
  • 为了指出异步函数中它可能挂起一次或多次的位置,使用了 await 关键字。
  • 当异步函数被挂起时,线程不会被阻塞。
  • 当异步函数恢复时,从它调用的异步函数返回的结果流回原始函数,并从上次停止的地方继续执行。

三、async/await应用相关

3.1 基于SwiftUI的应用

基于SwiftUI的应用

3.2 既有的完成处理程序&Delegate

        苹果对现存的以完成回调、代理返回的方法都进行了处理,以支持此种新特性。

相关文章

  • WWDC21-认识Swift中的async/await

    一、实例对比 假如我们需要从网络下载一个图片,并且把图片转换为缩略图;这两个操作都是耗时的操作,所以在下面的代码中...

  • WWDC21-Swift并发

    swift语言中的并发介绍 wwdc21-认识Swift中异步与等待 wwdc21-结构化并发

  • Swift 中的 async/await

    async-await 是在 WWDC 2021 期间的 Swift 5.5 中的结构化并发变化的一部分。Swif...

  • 'async' call in a function that

    在Swift5.5中使用async/await时,调用async函数的时候,出现了一个错误。 我的代码如下: 原因...

  • Swift 5.5 新特性

    Async/await 新旧方式的比较以前的方式: 现在的方式: 存在的问题是 Swift 5.5 Async/a...

  • 002 Rust异步编程,async await简单介绍

    此节对async/await做简单介绍,旨在让大家有一个简单的认识。 作用 async/.await是Rust编写...

  • async和await

    浅谈Async/Await用 async/await 来处理异步 async和await async:声明一个异步...

  • ES8(一) —— async&await

    目录 async和普通函数的区别 await async/await处理多回调异步 async和await必须配合...

  • async

    async/await特点 async/await更加语义化,async是“异步”的简写,async functi...

  • asp.net core 中async/await 使用

    asp.net core 中async/await 使用 async/await是用来进行异步调用的形式,内部其实...

网友评论

    本文标题:WWDC21-认识Swift中的async/await

    本文链接:https://www.haomeiwen.com/subject/xduneltx.html