[swift-evolution] [Concurrency] async/await + actors

Wallacy wallacyf at gmail.com
Sat Sep 9 19:32:47 CDT 2017


This is the only part of the proposal that i can't concur!

^async^ at call side solve this nicely! And Pierre also showed how common
people are doing it wrong! And will make this wrong using Futures too.

func doit() async {
let dataResource = async loadWebResource("dataprofile.txt”)
let imageResource = async loadWebResource("imagedata.dat”)
let imageTmp = await decodeImage(dataResource, imageResource)
self.imageResult = await dewarpAndCleanupImage(imageTmp)
}

Anyway, we have time to think about it.


Em sáb, 9 de set de 2017 às 20:30, David Hart via swift-evolution <
swift-evolution at swift.org> escreveu:

> On 10 Sep 2017, at 00:40, Kenny Leung via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> Then isn’t the example functionally equivalent to:
>
>     func doit() {
>         DispatchQueue.global().async {
>             let dataResource  = loadWebResource("dataprofile.txt")
>             let imageResource = loadWebResource("imagedata.dat")
>             let imageTmp      = decodeImage(dataResource, imageResource)
>             let imageResult   = dewarpAndCleanupImage(imageTmp)
>             DispatchQueue.main.async {
>                 self.imageResult = imageResult
>             }
>         }
>     }
>
> if all of the API were synchronous? Why wouldn’t we just exhort people to
> write synchronous API code and continue using libdispatch? What am I
> missing?
>
>
> There are probably very good optimisations for going asynchronous, but I’m
> not the right person for that part of the answer.
>
> But I can give another answer: once we have an async/await pattern, we can
> build Futures/Promises on top of them and then we can await on multiple
> asynchronous calls in parallel. But it won’t be a feature of async/await in
> itself:
>
> func doit() async {
> let dataResource  = Future({ loadWebResource("dataprofile.txt”) })
> let imageResource = Future({ loadWebResource("imagedata.dat”) })
> let imageTmp = await decodeImage(dataResource.get, imageResource.get)
>         self.imageResult = await dewarpAndCleanupImage(imageTmp)
> }
>
> -Kenny
>
>
> On Sep 8, 2017, at 2:33 PM, David Hart <david at hartbit.com> wrote:
>
>
> On 8 Sep 2017, at 20:34, Kenny Leung via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> Hi All.
>
> A point of clarification in this example:
>
> func loadWebResource(_ path: String) async -> Resourcefunc decodeImage(_ r1: Resource, _ r2: Resource) async -> Imagefunc dewarpAndCleanupImage(_ i : Image) async -> Image
> func processImageData1() async -> Image {
>     let dataResource  = await loadWebResource("dataprofile.txt")
>     let imageResource = await loadWebResource("imagedata.dat")
>     let imageTmp      = await decodeImage(dataResource, imageResource)
>     let imageResult   = await dewarpAndCleanupImage(imageTmp)
>     return imageResult
> }
>
>
> Do these:
>
> await loadWebResource("dataprofile.txt")
>
> await loadWebResource("imagedata.dat")
>
>
> happen in in parallel?
>
>
> They don’t happen in parallel.
>
> If so, how can I make the second one wait on the first one? If not, how
> can I make them go in parallel?
>
> Thanks!
>
> -Kenny
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170910/52e7c119/attachment.html>


More information about the swift-evolution mailing list