     
     the block can return a value of .CompleteUsing(Future<T>) if it wants this Future to complete with the results of another future.
     */
-    public init<C:CompletionType where C.T == T>(_ executor : Executor = .Immediate, block: () throws -> C) {
+    public init<C:CompletionType where C.T == T>(_ executor : Executor  = .Immediate, block: () throws -> C) {
         executor.execute { () -> Void in
-            do {
-                self.completeWith(try block())
-            }
-            catch {
-                self.completeWith(.Fail(error))
-                
-            }
+            self.completeWithBlocks(completionBlock: {
+                return try block()
+            })
+        }
+    }
+    public init<C:CompletionType where C.T == T>(_ executor : Executor  = .Immediate, @autoclosure(escaping)  block: () -> C) {
+        executor.execute { () -> Void in
+            self.completeWith(block())
         }
     }
 

class classWithMethodsThatReturnFutures {
    
    func iReturnAnInt() -> Future<Int> {
        return Future (.Immediate) { () -> Int in
            return 5
        }

    /**
    creates a completed Future.
    */
//    public init(result:FutureResult<T>) {  // returns an completed Task
//        self.__result = result
//    }
    /**
        creates a completed Future with a completion == .Success(success)
    */
