[swift-evolution] [Concurrency] async/await + actors
David Hart
david at hartbit.com
Sat Sep 9 18:30:09 CDT 2017
> 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 <mailto:david at hartbit.com>> wrote:
>>
>>
>>> On 8 Sep 2017, at 20:34, Kenny Leung via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>
>>> Hi All.
>>>
>>> A point of clarification in this example:
>>>
>>> func loadWebResource(_ path: String) async -> Resource
>>> func decodeImage(_ r1: Resource, _ r2: Resource) async -> Image
>>> func 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 <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <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/d332a2ae/attachment.html>
More information about the swift-evolution
mailing list