¿Cómo despacho_sync, dispatch_async, dispatch_after, etc. en Swift 3, Swift 4 y más allá?

Tengo un montón de código en proyectos Swift 2.x (o incluso 1.x) que se ve así:

// 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
    }
}

O cosas como esta para retrasar la ejecución:

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

O cualquiera de todo tipo de otros usos de Grand Central Dispatch API ...

Ahora que abrí mi proyecto en Xcode 8 (beta) para Swift 3, recibo todo tipo de errores. Algunos de ellos ofrecen arreglar mi código, pero no todas las correcciones producen código de trabajo. ¿Qué hago al respecto?

Respuestas a la pregunta(6)

Su respuesta a la pregunta