use async avoids queue lock problem