         return _is_finished
     }
     
-    public init(block : () throws -> AnyFuture) {
+    public init(executor:Executor = .Primary, block : () throws -> AnyFuture) {
+        self.executor = executor
         self.getSubFuture = block
         self._is_executing = false
         self._is_finished = false

        
        self._is_executing = true

        let f: Future<Any>
        do {
            f = try self.getSubFuture().futureAny
        }
        catch {
            f = Future(fail: error)
        }
        self.futureAny = f
        self.cancelToken = f.getCancelToken()

    
    public typealias FutureOperationBlockType = () throws -> (Future<T>)

    public class func OperationWithBlock(executor:Executor = .Primary, block b: () throws -> Future<T>) -> FutureOperation<T> {
        return FutureOperation<T>(executor: executor,block:b)
    }

    public var future : Future<T> {
        return self.promise.future.mapAs()
    }

    public init(executor:Executor = .Primary, block b: () throws -> Future<T>) {
        super.init(block: { () throws -> AnyFuture in
            return try b()
        })
