Not really certain what async/await adds, using this library (note self promotion) which is built on top of GCD:
https://github.com/hlovatt/Concurrency-Utilities You can write: func doit() { AsynchronousFuture { // Executes in background and therefore does not block main let dataResource = loadWebResource("dataprofile.txt") // Returns a future and therefore runs concurrently in background. let imageResource = loadWebResource("imagedata.dat") // Future therefore concurrent. let imageTmp = decodeImage(dataResource.get ?? defaultText, imageResource.get ?? defaultData) // Handles errors with defaults easily, including timeout. let imageResult = dewarpAndCleanupImage(imageTmp) Thread.executeOnMain { self.imageResult = imageResult } } } So why bother with async/await? PS I also agree with the comments that there is no point writing the 1st two lines of the example with async and then calling them with await - you might as well write serial code. -- Howard. On 10 September 2017 at 10:33, Wallacy via swift-evolution < swift-evolution@swift.org> wrote: > 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@swift.org> escreveu: > >> On 10 Sep 2017, at 00:40, Kenny Leung via swift-evolution < >> swift-evolution@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 <da...@hartbit.com> wrote: >> >> >> On 8 Sep 2017, at 20:34, Kenny Leung via swift-evolution < >> swift-evolution@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@swift.org >> https://lists.swift.org/mailman/listinfo/swift-evolution >> >> >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org >> https://lists.swift.org/mailman/listinfo/swift-evolution >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org >> https://lists.swift.org/mailman/listinfo/swift-evolution >> > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution > >
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution