diff --git a/src/StackExchange.Redis/Maintenance/AzureMaintenanceEvent.cs b/src/StackExchange.Redis/Maintenance/AzureMaintenanceEvent.cs index 4e32afa5a..f4c7d3e49 100644 --- a/src/StackExchange.Redis/Maintenance/AzureMaintenanceEvent.cs +++ b/src/StackExchange.Redis/Maintenance/AzureMaintenanceEvent.cs @@ -124,24 +124,32 @@ internal static async Task AddListenerAsync(ConnectionMultiplexer multiplexer, A try { var sub = multiplexer.GetSubscriber(); - if (sub == null) + // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract + if (sub is null) { log?.Invoke("Failed to GetSubscriber for AzureRedisEvents"); return; } - await sub.SubscribeAsync(RedisChannel.Literal(PubSubChannelName), async (_, message) => + await sub.SubscribeAsync(RedisChannel.Literal(PubSubChannelName), (_, message) => { - var newMessage = new AzureMaintenanceEvent(message!); - newMessage.NotifyMultiplexer(multiplexer); + try + { + var newMessage = new AzureMaintenanceEvent(message!); + newMessage.NotifyMultiplexer(multiplexer); - switch (newMessage.NotificationType) + switch (newMessage.NotificationType) + { + case AzureNotificationType.NodeMaintenanceEnded: + case AzureNotificationType.NodeMaintenanceFailoverComplete: + case AzureNotificationType.NodeMaintenanceScaleComplete: + multiplexer.ReconfigureAsync($"Azure Event: {newMessage.NotificationType.ToString()}").RedisFireAndForget(); + break; + } + } + catch (Exception e) { - case AzureNotificationType.NodeMaintenanceEnded: - case AzureNotificationType.NodeMaintenanceFailoverComplete: - case AzureNotificationType.NodeMaintenanceScaleComplete: - await multiplexer.ReconfigureAsync($"Azure Event: {newMessage.NotificationType}").ForAwait(); - break; + log?.Invoke($"Encountered exception: {e}"); } }).ForAwait(); } diff --git a/src/StackExchange.Redis/RedisSubscriber.cs b/src/StackExchange.Redis/RedisSubscriber.cs index ca66e6113..bd2434771 100644 --- a/src/StackExchange.Redis/RedisSubscriber.cs +++ b/src/StackExchange.Redis/RedisSubscriber.cs @@ -135,7 +135,14 @@ internal long EnsureSubscriptions(CommandFlags flags = CommandFlags.None) var subscriber = DefaultSubscriber; foreach (var pair in subscriptions) { - count += pair.Value.EnsureSubscribedToServer(subscriber, pair.Key, flags, true); + try + { + count += pair.Value.EnsureSubscribedToServer(subscriber, pair.Key, flags, true); + } + catch (Exception ex) + { + OnInternalError(ex); + } } return count; }