async limit to prevent browser lockup, show progress