added async support, added ICacheKeyProvider to change implementation on how keys are generated