perform the hard work asyncronously