implement multi threading support
continue to implement multi threading: use strand to wrap async calls