implement async generation framework!