Collapses concurrent calls that share a key into one call.
It stores nothing once a call settles: the next caller starts a new one.
That is the whole difference between this and a cache, and it is why there
is no expiry to configure. A cache is storage with an invalidation story,
which belongs in your data layer.
The shared call is abandoned only when every caller has abandoned it: each
caller's signal detaches that caller, and the last one to leave aborts the
work.
Collapses concurrent calls that share a key into one call.
It stores nothing once a call settles: the next caller starts a new one. That is the whole difference between this and a cache, and it is why there is no expiry to configure. A cache is storage with an invalidation story, which belongs in your data layer.
The shared call is abandoned only when every caller has abandoned it: each caller's signal detaches that caller, and the last one to leave aborts the work.