simplify cache extension base.
add async exception

async job is not very suitable as normal return value, so we'll
use an exception to implement it for now.