 	}
 	
 	public override func cancel() {
-		guard canStartFinishOrCancel else { return }
+		guard notFinishedOrCancelled else { return }
 	
 		super.cancel()
 		

		// Queue up a timeout that cancels the operation from the main thread.
		if timeout > 0 {
			DispatchQueue.main.asyncAfter(deadline: .now() + timeout) { [weak self] in
				guard let strongSelf = self, strongSelf.canStartFinishOrCancel else { return }
				strongSelf.cancelWork(withError: NSError(self?._timeoutError ?? "", withCode: -1, log: false))
			}
		}

	private var _startTime: Date?
	private var _finishTime: Date?

	public var notFinishedOrCancelled: Bool {
		return !isFinished && !isCancelled
	}
	
	public let timeout: TimeInterval
