Hello Wiet,
Depends on what your use case is. Does a solve in your loop depend on the solution from a previous solve ? If yes, you should use a for loop.
Asynchronous execution will start the process does not wait till it is completed. So, you have to manually invoke checking for and retrieving the solution.
There is no black and white answer to which is efficient. It all depends on what you are trying to do.