         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()

        }
    }
    
    public final func onComplete(completion: ((T) -> ())) -> Self {
        onCompleteBlock = completion
        return self
    }
    
    public final func onError(completion: ((ErrorType) -> ())) -> Self {
        onErrorBlock = completion
        return self
    }
    
    var state: State {
        get {
            return Dispatch.sync(queue) { return self.internalState }

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