         guard currentState == .notStarted else { return }
         
         // Retain ourself and cache for retrieval later
-        Task._cachedTasks[identifier] = self
+        Task.cache(task: self, forID: identifier)
         
         // Ensure we actually have work to do, fail otherwise
         guard let work = _workToDo else {

        }
        
        // Remove ourself from the cache / stop retaining self
        Task._cachedTasks[identifier] = nil
    }
    
    private func doRetry() {

    }
    
    public final class func with(ID identifier: String) -> Task? {
        var toReturn: Task? = nil
        _cachedTasksSafetyQueue.sync {
            toReturn = _cachedTasks[identifier]
        }
        return toReturn
    }
    
    public init(withWork workBlock: @escaping TaskWorkClosure) {
