use async for read