Unless the load times are extreme, use the first method because it gives the user feedback on the operation when it's complete. Besides, the second method raises some usability questions such as reconciling the output with the fact that the user could be moving all around the page and opening up different output windows/widgets. Also, by going asynch, the user might disregard the operation as unimportant.
Asynchronous interaction is great if the user can see the results of the different interactions independently, otherwise one interaction can mask another. For instance, in a dashboard situation where each request goes to a different widget and is processed in parallel, asynchronous interactions are fine. Some interactions can take longer than others, but the ones that are ready are displayed and the widgets that are loading will show a progress animation.
Here's an example:
If you want to adopt a similar UI for your situation, then the 2nd technique can work for you.