Assuring multicast delegate execution list order in C#?

前端 未结 1 1856
时光说笑
时光说笑 2021-01-13 07:39

After doing some reading I understand that handlers invocation order is the same order as subscribed but it is not guaranteed .

So lets say I have :

相关标签:
1条回答
  • 2021-01-13 08:01

    If it's a field-like event, it will use simple delegate combination as per Delegate.Combine, and that is guaranteed to preserve subscription order. From the docs for the return value:

    A new delegate with an invocation list that concatenates the invocation lists of a and b in that order.

    In general for events, nothing is guaranteed - it's up to the implementation. Heck, it could ignore every subscription you ever make. In reality though, any sane implementation will preserve ordering.

    EDIT: Sample of a mischievous event implementation:

    public class BadEventPublisher
    {
        public event EventHandler Evil
        {
            add { Console.WriteLine("Mwahahaha!"); }
            remove { }
        }
    
        protected virtual void OnEvil(EventArgs e)
        {
            Console.WriteLine("Who cares? Subscriptions are ignored!");
        }
    }
    

    This is just like writing a property which (say) returns a random number from the getter and ignores the value in the setter. It's more of a theoretical problem than a real one.

    0 讨论(0)
提交回复
热议问题