Como envio dispatch_sync, dispatch_async, dispatch_after etc. no Swift 3, Swift 4 e além?

Eu tenho muito código nos projetos Swift 2.x (ou até 1.x) que se parecem com isso:

// Move to a background thread to do some long running work
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    let image = self.loadOrGenerateAnImage()
    // Bounce back to the main thread to update the UI
    dispatch_async(dispatch_get_main_queue()) {
        self.imageView.image = image
    }
}

Ou coisas assim para atrasar a execução:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
    print("test")
}

Ou qualquer outro tipo de uso da API Grand Central Dispatch ...

Agora que abri meu projeto no Xcode 8 (beta) para o Swift 3, recebo todos os tipos de erros. Alguns deles oferecem a correção do meu código, mas nem todas as correções produzem código funcional. O que eu faço sobre isso?

questionAnswers(6)

yourAnswerToTheQuestion