Actor: OnTakeAnyDamage Delegate vs override TakeDamage?

I am confused about that.

I have a simple Actor, it is a TreeActor, my character apply damage on it by Blueprint ApplyDamage, then in cpp, TreeActor, I found a delegate OnTakeAnyDamage, I use it, but not recive damage(not be invoked), I found another function named TakeDamage, so I override it, this one receive event.

so, why there is two way to receive damage event? why OnTakeAnyDamage delegate not work?