         self.willAccessValue()
         defer {
             self.didAccessValue()
-            self.finishOperation()
+            
+            self.finishOperation()
+            
+            if let progress = self._progress {
+                progress.completedUnitCount = progress.totalUnitCount
+            }
         }
         
         guard self.value == nil else { return }

        self.willAccessValue()
        defer {
            self.didAccessValue()
            self.finishOperation()
        }
        
        guard self.value == nil && self.error == nil else { return }

    public override final func waitUntilFinished() {
        assert(!NSThread.isMainThread(), "Cannot wait task on main thread.")
        super.waitUntilFinished()
    }
    
    // MARK: -
    private var _progress: NSProgress?
    public final var progress: NSProgress {
        if self._progress == nil {
            self._progress = TaskProgress(task: self)
        }
        
        return self._progress!
    }

    // MARK: -
