Async Invalidate and InvalidateAll

Invalidate and InvalidateAll currently are assuming that even though delete is an asynchronous method, we treat it as synchronous, and generally do dumb stuff. Fix it to correctly respect completion