-->

确保在C#中多播委托执行列表的顺序?(Assuring multicast delegate exe

2019-07-04 16:49发布

做一些阅读后,我明白,处理程序调用顺序是相同的顺序订阅,但它不能保证。

因此,可以说,我有:

public event MYDEl ev;

和用户做:

ev+=GetPaper;
ev+=Print;
ev+=EjectPaper;

保留+保证执行列表顺序的最佳实践机制是什么?

Answer 1:

如果它是一个场式的事件,它会用简单的委托组合按Delegate.Combine ,并保证维护订阅订单。 从文档返回值:

一个新的委托与串接的a和b的调用列表的顺序调用列表。

一般事件,没有什么是保证-这是由实现。 哎呀,它可以不理你永远尽订阅。 然而实际上,任何理智的实施将保留排序。

编辑:淘气的事件实现的示例:

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!");
    }
}

这就像写从吸气剂(说)返回一个随机数,忽略了二传手的值的属性。 这是不是一个真实的更高的理论问题。



文章来源: Assuring multicast delegate execution list order in C#?