using LFlow.InternalEventBus.Interface; using System.Collections.Concurrent; namespace LFlow.InternalEventBus { public class InternalEventBus { private static readonly ConcurrentDictionary> _eventSubscriberDict = new(); /// /// 注册事件 /// /// /// public static void Register(string eventName, IInternalEventSubscriber subscriber) { if (!_eventSubscriberDict.ContainsKey(eventName)) { _eventSubscriberDict.TryAdd(eventName, []); } _eventSubscriberDict[eventName].Add(subscriber); } /// /// 取消注册事件 /// /// /// public static void UnRegister(string eventName, IInternalEventSubscriber subscriber) { if (_eventSubscriberDict.ContainsKey(eventName)) { _eventSubscriberDict[eventName].Remove(subscriber); } } /// /// 发布事件 /// /// /// /// public static async void Publish(string eventName, object data) { if (_eventSubscriberDict.ContainsKey(eventName)) { foreach (var subscriber in _eventSubscriberDict[eventName].OrderBy(i => i.Priority)) { var isContinue = await subscriber.Handle(data); if (!isContinue) { return; } } } } /// /// 发布事件 /// /// /// /// public static async Task PublishAsync(string eventName, object data) { Task.Factory.StartNew(() => Publish(eventName, data)); } } }