The “gist” is: Create a Message Start Event that captures all messages, and then have script event that re-correlates the messages to their proper destination. And as you can see in the example there are error handling that can be done as well.
I would suggest one small modification. There is a race condition between the auction closing and calculating a winner. Hence, Ive put the event driven sub-process in a nested scope to reduce the opportunity of the race condition…
Auction close would not kill the store offer task but rather wait for completion (unless you make it a terminate event).
Your example works almost the same way. The only difference is that in your case store offer would not have access to any local variables of the sub process (not recommended anyway) and open offers could be executed while store offer is still running. That means there is a race condition again.