Understanding order of execution with Temporal's UpdateHandler and signal handling

Hello, I’m trying to understand how the new feature UpdateHandler (Go SDK developer's guide - Features | Temporal Documentation) works in combination with select. I have multiple signals that can arrive at different times and in different orders, so I’m using select in an infinite loop. However, I also want to have the ability to trigger an UpdateHandler after a certain block of code, so I can add an item to an order at any time. In other words, after a certain point in the code, I’m expecting either signals or the UpdateHandler to be executed throughout the long-running workflow. Can it work like this?

Also, what is the order of execution in this case? I understand that for signals, the one that arrives first will be executed first, but what happens when the UpdateHandler comes into play? Who gets executed first in the following cases:

  1. Signal 1 arrives, Signal 2 arrives, Update request arrives
  2. Update arrives, Signal 1 arrives, Signal 2 arrives
  3. Signal 1 arrives, Update arrives, Signal 2 arrives

Additionally, I saw in the code comments that this is experimental, but I couldn’t find any information about this in the documentation. Is it safe to use this in production?