         }.name("\(self.name)-failure")
     }
     
+    ///
+    /// Add side-effects after completion.
+    ///
+    /// - Note: This method doesn't create new task, so it has better performance over `then()`/`success()`/`failure()`.
+    /// - Returns: Self (same `Task`)
+    ///
     public func on(success success: (Value -> Void)? = nil, failure: (ErrorInfo -> Void)? = nil) -> Self
     {
         var dummyCanceller: Canceller? = nil

    }
    
    ///
    /// then (fulfilled & rejected) + closure returning **task**
    /// (a.k.a. `flatMap` in functional programming term)
    ///
    /// - e.g. task.then { value, errorInfo -> NextTaskType in ... }
    ///
    public func then<Progress2, Value2, Error2>(thenClosure: (Value?, ErrorInfo?) -> Task<Progress2, Value2, Error2>) -> Task<Progress2, Value2, Error2>
    {

    }
    
    ///
    /// `failure` (rejected or cancelled) + closure returning **value**.
    /// (synonym for `mapError` in functional programming)
    ///
    /// - e.g. task.failure { errorInfo -> NextValueType in ... }
    /// - e.g. task.failure { error, isCancelled -> NextValueType in ... }
    ///
    /// - Returns: New `Task`
    ///
    public func failure(failureClosure: ErrorInfo -> Value) -> Task
    {
        var dummyCanceller: Canceller? = nil
