         guard let url = _url(for: key) else {
             return nil
         }
-        return _wqueue.sync {
-            return try? Data(contentsOf: url)
-        }
+        return try? Data(contentsOf: url)
     }
 
     private func _setData(data: Data, for key: Key) {

    /// Stores data for the given key. The method returns instantly and the data
    /// is written asyncrhonously.
    public func storeData(_ data: Data, for key: Key) {
        self[key] = data
    }

    /// Removes data for the given key. The method returns instantly, the data
    /// is removed asyncrhonously.
    public func removeData(for key: Key) {
        self[key] = nil
    }

    // MARK: Data Accessors

    subscript(key: Key) -> Data? {
        get {
            return _getData(for: key)

///
/// - warning: The implementation must be thread safe.
public protocol DataCaching {
    /// Retrieves data from cache for the given key.
    func cachedData(for key: String, _ completion: @escaping (Data?) -> Void) -> Cancellable

    /// Stores data for the given key.
    func storeData(_ data: Data, for key: String)
}

