reduce some dependency
use aysnc instead of raw thread