private async Task DoForAllReceivers(MessageReceiverTypes waitForReceiverTypes, Func<IEventBasedReceiver, Task> action) { var typesToProcessInBackground = (MessageReceiverTypes)((int)waitForReceiverTypes ^ -1); var messageReceiversToWaitFor = GetMessageReceiver(waitForReceiverTypes).ToArray(); var messageReceiversToHandleInBackground = GetMessageReceiver(typesToProcessInBackground).ToArray(); await messageReceiversToWaitFor.Select(async (receiver) => await action(receiver)).WhenAll(); await messageReceiversToHandleInBackground.Select(async (receiver) => await action(receiver)).WhenAll(); }
private IEnumerable<IEventBasedReceiver> GetMessageReceiver(MessageReceiverTypes messageReceiverTypes) { if (messageReceiverTypes.HasFlag(MessageReceiverTypes.Command)) foreach (var messageReceiver in _commandEventBasedReceivers) yield return messageReceiver; if (messageReceiverTypes.HasFlag(MessageReceiverTypes.MulticastEvent)) foreach (var messageReceiver in _multicastEventEventBasedReceivers) yield return messageReceiver; if (messageReceiverTypes.HasFlag(MessageReceiverTypes.CompetingEvent)) foreach (var messageReceiver in _competingEventEventBasedReceivers) yield return messageReceiver; }
public async Task Stop(MessageReceiverTypes messageReceiverTypes) { //we dont stop //await DoForAllReceivers(messageReceiverTypes, receiver => receiver.UnSubscribeToQueue()); await Task.FromResult<object>(null); }
public async Task SubscribeAllReceivers(MessageReceiverTypes messageReceiverTypes) { await DoForAllReceivers(messageReceiverTypes, receiver => receiver.SubscribeToQueue()); }