C# 一个事件有多个订阅者的排序问题
C# one event with multiple subscribers issues with ordering
我有一个 class ,我们称它为 class A 。 Class A 有一个事件 "OnSendData" 。还有另一个 class 名为 B 。 Class A 有一个引用了 class B 的数组列表。 Class A 在发生某些事情时创建 class B 的实例,并将它们添加到其 arraylist 中。在 class B 构造函数中,我有这样的代码:
Public B (A parent)
{ Parent.OnSendData += parent_OnSendData; }
当我调用 class 事件时,我的事件订阅者按订阅顺序调用。我不要这个,我要他们都立刻通知。
我应该怎么做才能发生这种情况??
在您引发事件的地方,您可以调用 Delegate.GetInvocationList
来获取所有订阅者 - 然后为每个订阅者使用一个单独的任务或线程来并行调用它们。
请注意,您的订阅者必须是线程安全的才能使它工作——ArrayList
和 List<T>
都不是(您应该使用后者;ArrayList
是 2004 年的...) 是线程安全的,因此您需要额外的锁定等。
我有一个 class ,我们称它为 class A 。 Class A 有一个事件 "OnSendData" 。还有另一个 class 名为 B 。 Class A 有一个引用了 class B 的数组列表。 Class A 在发生某些事情时创建 class B 的实例,并将它们添加到其 arraylist 中。在 class B 构造函数中,我有这样的代码:
Public B (A parent)
{ Parent.OnSendData += parent_OnSendData; }
当我调用 class 事件时,我的事件订阅者按订阅顺序调用。我不要这个,我要他们都立刻通知。 我应该怎么做才能发生这种情况??
在您引发事件的地方,您可以调用 Delegate.GetInvocationList
来获取所有订阅者 - 然后为每个订阅者使用一个单独的任务或线程来并行调用它们。
请注意,您的订阅者必须是线程安全的才能使它工作——ArrayList
和 List<T>
都不是(您应该使用后者;ArrayList
是 2004 年的...) 是线程安全的,因此您需要额外的锁定等。