     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: -

            closure(self)
        }
    }

}

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