internal Task RemoveAllSubscriptions(CommandFlags flags, object asyncState) { Task last = CompletedTask <bool> .Default(asyncState); lock (subscriptions) { foreach (var pair in subscriptions) { var msg = pair.Value.ForSyncShutdown(); if (msg != null) { UnprocessableCompletionManager.CompleteSyncOrAsync(msg); } pair.Value.Remove(true, null); pair.Value.Remove(false, null); var task = pair.Value.UnsubscribeFromServer(pair.Key, flags, asyncState, false); if (task != null) { last = task; } } subscriptions.Clear(); } return(last); }
internal void OnMessage(RedisChannel subscription, RedisChannel channel, RedisValue payload) { ICompletable completable = null; lock (subscriptions) { if (subscriptions.TryGetValue(subscription, out Subscription sub)) { completable = sub.ForInvoke(channel, payload); } } if (completable != null) { UnprocessableCompletionManager.CompleteSyncOrAsync(completable); } }