> Le 4 sept. 2017 à 10:01, Wallacy via swift-evolution 
> <[email protected]> a écrit :
> 
> func processImageData1a() async ->
>  Image {
>   let dataResource  = async loadWebResource("dataprofile.txt")
>   let imageResource = async loadWebResource("imagedata.dat")
>   
>   // ... other stuff can go here to cover load latency...
>   
>   let imageTmp    = await decodeImage(dataResource, imageResource) // 
> compiler error if await is not present.
>   let imageResult = await dewarpAndCleanupImage(imageTmp)
>   return imageResult
> }
> 
> 
> If this (or something like that) is not implemented, people will create 
> several versions to solve the same problem, so that later (Swift 6?) will be 
> solved (because people want this), and we will live with several bad codes to 
> maintain.

Just to be sure of what you are proposing, am I right to assume this would be 
compiled down to something like this?

func processImageData1a(completion: (Image) -> ()) {
  var dataResource: Resource? = nil
  var imageResource: Resource? = nil
  var finishedBody = false

  func continuation() {
    // only continue once everything is ready
    guard finishedBody else { return }
    guard dataResource = dataResource else { return }
    guard imageResource = imageResource else { return }

    // everything is ready now
    decodeImage(dataResource, imageResource) { imageTmp in
      dewarpAndCleanupImage(imageTmp) { imageResult in
        completion(imageResult)
      }
    }
  }

  loadWebResource("dataprofile.txt") { result in
    dataResource = result
    continuation()
  }
  loadWebResource("imagedata.dat") { result in
    imageResource = result
    continuation()
  }

  // ... other stuff can go here to cover load latency...

  finishedBody = true
  continuation()
}


This seems more lightweight than a future to me. I know I've used this pattern 
a few times. What I'm not sure about is how thrown errors would work. Surely 
you want error handling to work when loading resources from the web.


-- 
Michel Fortin
https://michelf.ca

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to