             self.currentMemoryUsage += cachedImage.totalBytes
         }
 
-        synchronizationQueue.async(execute: cacheWork)
-
-        let cleanupWork = DispatchWorkItem(flags: [DispatchWorkItemFlags.barrier]) {
+        synchronizationQueue.async(flags: [.barrier]) {
             if self.currentMemoryUsage > self.memoryCapacity {
                 let bytesToPurge = self.currentMemoryUsage - self.preferredMemoryUsageAfterPurge
 

                self.currentMemoryUsage -= bytesPurged
            }
        }
        synchronizationQueue.async(execute: cleanupWork)
    }

    // MARK: Remove Image from Cache

    /// - parameter image:      The image to add to the cache.
    /// - parameter identifier: The identifier to use to uniquely identify the image.
    public func add(_ image: Image, withIdentifier identifier: String) {
        synchronizationQueue.async(flags: [.barrier]) {
            let cachedImage = CachedImage(image, identifier: identifier)

            if let previousCachedImage = self.cachedImages[identifier] {
