 }
 
 extension ViewController {
-    
+
+    func asyncDone() -> NonFailableTask<Void> {
+        return async { task in
+            await(self.t4)
+            
+            NSOperationQueue.mainQueue().addOperationWithBlock {
+                self.doneLabel.text = "Done!"
+                self.doneLabel.hidden = false
+                
+                // we can finish the task on any thread, even the main thread
+                task.finish()
+            }
+        }
+    }
+
     func asyncLoadImage() -> Task<UIImage> {
         // an observer is not needed to the task finish its job, but to have a network activity indicator at the top would be nice...
         let networkActivityObserver = NetworkActivityTaskObserver(application: UIApplication.sharedApplication())

        }
    }
    
    func asyncDone() -> NonFailableTask<Void> {
        return async { task in
            await(self.t4)

            NSOperationQueue.mainQueue().addOperationWithBlock {
                self.doneLabel.text = "Done!"
                self.doneLabel.hidden = false
                
                // we can finish the task on any thread, even the main thread
                task.finish()
            }
        }
    }
   
}
            await(self.t1)
            
            NSOperationQueue.mainQueue().addOperationWithBlock {
                // interface elements have to be updated on the main thread
                self.twoButton.enabled = true
            }
        }
