> On 10 Sep 2017, at 00:40, Kenny Leung via swift-evolution
> <[email protected]> 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 <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>
>>> On 8 Sep 2017, at 20:34, Kenny Leung via swift-evolution
>>> <[email protected] <mailto:[email protected]>> 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
>>> [email protected] <mailto:[email protected]>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>
>
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution