The implementation of delegates is very complicated and is completed by UHT at compile-time.
It looks like the event is sent to the registered UObject synchronously. I can’t tell you 100% if it is complete synchronous, but it looks like that.
I also use delegates and didn’t run into async problems, the always fire at the right time.