This does not actually cleanup the RDD, but rather just queues it for cleanup. At the very least it needs documentation, but from a user's standpoint, if they call cleanup(), they may well want it to actually block on the cleanup being completed. I can't see a particular case in which correctness relies on timely cleanup except for perf testing, though. I also don't see a particularly good reason to enqueue the cleanup here except to share the code path with the finalizer.