use async to keep watch alive