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

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

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