support asynchronous task in #add
just like Promise, but with slight modifications