         self.currentState = state
         
         // Now get on the feedback queue to finish up
-        self.queueForFeedback.sync {
-            self._finishHandler?(self.currentState)
+        if self._finishHandlers.count > 0 {
+            self.queueForFeedback.sync {
+                for feedback in self._finishHandlers {
+                    feedback(self.currentState)
+                }
+            }
         }
         
         // Remove ourself from the cache / stop retaining self

    
    public final func onStart(_ handler: @escaping ()->()) {
        _internalQueue.async { [weak self] in
            self?._startHandler = handler
        }
    }
    
    public final func onProgress(_ handler: @escaping ProgressHandler) {
        _internalQueue.async { [weak self] in
            self?._progressHandler = handler
        }
    }
    
    public final func onFinish(_ handler: @escaping FinishHandler) {
        _internalQueue.async { [weak self] in
            self?._finishHandler = handler
        }
    }
    

    
    private let _internalQueue = DispatchQueue(label: "TaskInternal")
    private var _workToDo: TaskWorkBlock?
    private var _startHandlers = Array<(()->())>()
    private var _progressHandlers = Array<ProgressHandler>()
    private var _finishHandlers = Array<FinishHandler>()
    
    static private var _cachedTasks = Dictionary<String, Task>()
    
