add batch and async