 extension NonFailableTask {
     
     @discardableResult
-    public func didFinishWithValue(queue: OperationQueue? = nil, callbackQueue: OperationQueue? = nil, closure: @escaping (Value) -> Void) -> NonFailableTaskAwaiter<Value> {
-        return NonFailableTaskAwaiter(queue: queue ?? taskAwaiterDefaultOperationQueue, task: self).didFinishWithValue(closure)
+    public func then(in queue: OperationQueue? = nil, callbackQueue: OperationQueue? = nil, closure: @escaping (Value) -> Void) -> NonFailableTaskAwaiter<Value> {
+        return NonFailableTaskAwaiter(queue: queue ?? taskAwaiterDefaultOperationQueue, task: self).then(closure)
     }
     
     @discardableResult
-    public func didFinish(queue: OperationQueue? = nil, callbackQueue: OperationQueue? = nil, closure: @escaping () -> Void) -> NonFailableTaskAwaiter<Value> {
-        return NonFailableTaskAwaiter(queue: queue ?? taskAwaiterDefaultOperationQueue, task: self).didFinish(closure)
+    public func finally(in queue: OperationQueue? = nil, callbackQueue: OperationQueue? = nil, closure: @escaping () -> Void) -> NonFailableTaskAwaiter<Value> {
+        return NonFailableTaskAwaiter(queue: queue ?? taskAwaiterDefaultOperationQueue, task: self).finally(closure)
     }
     
 }

    }
    
    @discardableResult
    public func didFinishWithValue(_ closure: @escaping (Value) -> Void) -> Self {
        self.didFinishWithValueClosure = closure
        return self
    }
    
    @discardableResult
    public func didFinish(_ closure: @escaping () -> Void) -> Self {
        self.didFinishClosure = closure
        return self
    }

extension Task {
    
    @discardableResult
    public func then(in queue: OperationQueue? = nil, callbackQueue: OperationQueue? = nil, closure: @escaping (Value) -> Void) -> TaskAwaiter<Value> {
        return TaskAwaiter(queue: queue ?? taskAwaiterDefaultOperationQueue, task: self).then(closure)
    }
    
    @discardableResult
    public func `catch`(in queue: OperationQueue? = nil, callbackQueue: OperationQueue? = nil, closure: @escaping (Error) -> Void) -> TaskAwaiter<Value> {
        return TaskAwaiter(queue: queue ?? taskAwaiterDefaultOperationQueue, task: self).catch(closure)
    }
    
    @discardableResult
    public func cancelled(in queue: OperationQueue? = nil, callbackQueue: OperationQueue? = nil, closure: @escaping () -> Void) -> TaskAwaiter<Value> {
        return TaskAwaiter(queue: queue ?? taskAwaiterDefaultOperationQueue, task: self).cancelled(closure)
    }

    @discardableResult
    public func finally(in queue: OperationQueue? = nil, callbackQueue: OperationQueue? = nil, closure: @escaping () -> Void) -> TaskAwaiter<Value> {
        return TaskAwaiter(queue: queue ?? taskAwaiterDefaultOperationQueue, task: self).finally(closure)
    }

}
