         }
     }
     
+    /**
+     Completion block that is executed when the task reaches `Finished` state and 
+     `.Value` is passed to the `finish:` method. Completion block takes one 
+     argument `T`, which is `.Value` component from the task result.
+     
+     See `Result<T>`.
+     
+     Block should be set by using `onComplete:` method on `Self`.
+     
+     - Warning: Setting this property directly may result in unexpected behaviour.
+     Always use `onComplete:` method on `Self` to set the block.
+    */
     var onCompleteBlock: ((T) -> Void)? {
         get {
             return Dispatch.sync(queue) {

        }
    }
    
    private final func moveToFinishedState() {
        state = .Finished
    }

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