use async macro