Are delegates blocking or asynchronous?

Very basic question, as the title suggests: when I subscribe to a delegate via AddDynamic() and then call Broadcast() on it, does it process the event in a blocking fashion, or is it asynchronous?

Example:

DelegatesComponent->SquadLeaderChanged.AddDynamic(this, &USquadMembershipComponent::OnSquadLeaderChanged);
DelegatesComponent->SquadLeaderChanged.Broadcast(Squad->SquadLeader);

// IS THIS GUARANTEED TO EXECUTE ONLY AFTER OnSquadLeaderChanged HAS FINISHED?
Something();

void USquadMembershipComponent::OnSquadLeaderChanged(AActor* SquadLeader)
{
	bSquadLeader = GetOwner() == SquadLeader;
}

So does Something() execute only after OnSquadLeaderChanged() has finished, or is another thread listening via Broadcast()?

I couldn’t really find anything in the source code.

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.

Thanks and yeah, that’s also been my experience so far. Just wanted someone with more insight to confirm if it is guaranteed to be the case. I guess if I don’t get a dev to answer then I’ll just mark this as accepted in a couple of days.