 	
 		// Generates the KVO necessary for the queue to remove this operation. NOTE: This is necessary for the KVO to be
 		// atomic - at no point will there be notifications for one property before the other is also set.
+		willChangeValue(forKey: #keyPath(AsyncOperation.isFinished))
 		willChangeValue(forKey: #keyPath(AsyncOperation.isExecuting))
-		willChangeValue(forKey: #keyPath(AsyncOperation.isFinished))
 		
 		if selfLogEnabled {
 			var errorString: String = ""

	
		super.cancel()
		
		willChangeValue(forKey: #keyPath(AsyncOperation.isCancelled))
		willChangeValue(forKey: #keyPath(AsyncOperation.isExecuting))
		willChangeValue(forKey: #keyPath(AsyncOperation.isFinished))
		
		if selfLogEnabled {
			var errorString: String = ""

		_isFinished = true
		_finishTime = Date()
		
		didChangeValue(forKey: #keyPath(AsyncOperation.isExecuting))
		didChangeValue(forKey: #keyPath(AsyncOperation.isCancelled))
		didChangeValue(forKey: #keyPath(AsyncOperation.isFinished))
		
		_endBackgroundTask()
	}
