      - Parameter task: Task<T> to be added
      */
     open func add<T>(task: Task<T>) {
-        let finishObserver = FinishBlockObserver { [weak self] in
-            if let queue = self {
-                queue.delegate?.didFinish(task: task, inQueue: queue)
-            }
-        }
-        
         if !task.contains(observer: FinishBlockObserver.self) {
-            task.add(observer: finishObserver)
+            task.add(observer: FinishBlockObserver { [weak self] in
+                if let queue = self {
+                    queue.delegate?.didFinish(task: task, inQueue: queue)
+                }
+            })
         }
         
         // Evaluate condition dependencies and add them to the queue

    /// TaskQueue delegate object
    weak open var delegate: TaskQueueDelegate?
    
    // MARK: Init methods
    
    /// Creates instance of `TaskQueue`
    public init() {
        self.operationQueue = OperationQueue()
    }
    
    /**

    
    /// Underlying `Foundation.OperationQueue` instance used for executing
    /// `Foundation.Operation` operations
    internal let operationQueue: OperationQueue
    
    /**
     Returns queue associated with application main queue.
