         
         set(newState) {
             
+            // Notify internal `NSOperation` observers that state will be changed
             willChangeValueForKey("state")
             
             Dispatch.sync(queue) {

        }
    }
    
    var onCompleteBlock: ((T) -> Void)? {
        get {
            return Dispatch.sync(queue) {

        state = .Ready
    }
    
    /**
     Finish execution of the task with result. Calling this method will change 
     task state to `Finished` and call neccesary completion blocks. If task finished
     with `Value(T)`, `onCompleteBlock` will be executed. If task finished with 
     `Error(ErrorType)` result, `onErrorBlock` will be executed.
     
     - Parameter result: Task result (`.Value(T)` or `.Error(ErrorType)`)
     
     - Note: 
     Safe to call from any thread.
    */
    public final func finish(result: Result<T>) {
        self.result = result
        moveToFinishedState()
