better asyncify interface