I have this object PreloadClient which implements IDisposable, I want to dispose it, but after the asynchronous methods finish their call... which
PreloadClient
IDisposable
Asynchronous waits and deterministic disposal don't mix very well. If you can find a way of splitting the code such that the disposable stuff goes in one class and the events go in another, that would make everything simpler.