After discussing it with the architects and getting their feedback. It is absolutely fine to send the messages asynchronously. Instead of making your app engine sleep before everything gets done, we can let the application engine go to success and then we can populate a physical table as we keep consuming the messages and update the state of each row accordingly.
Thanks for this wonderful community, I hope this thread can help anyone who can be benefited with this approach.