protected RedisSubBase(RedisDb redisDb, RedisSubKey key, TimeSpan?subscribeTimeout = null) { RedisDb = redisDb; Key = key.Key; PatternMode = key.PatternMode; FullKey = RedisDb.FullKey(Key); Subscriber = RedisDb.Redis.GetSubscriber(); RedisChannel = new RedisChannel(FullKey, PatternMode); _onMessage = OnMessage; _subscribeTimeoutCts = new CancellationTokenSource(subscribeTimeout ?? DefaultSubscribeTimeout); WhenSubscribed = Task.Run(async() => { var cancellationToken = _subscribeTimeoutCts.Token; try { await Subscriber .SubscribeAsync(RedisChannel, _onMessage) .WithFakeCancellation(cancellationToken) .ConfigureAwait(false); } catch (OperationCanceledException) { if (IsDisposeStarted) { throw; } if (cancellationToken.IsCancellationRequested) { throw new TimeoutException(); } throw; } }, CancellationToken.None); }
public RedisActionSub(RedisDb redisDb, RedisSubKey key, Action <RedisChannel, RedisValue> messageHandler, TimeSpan?subscribeTimeout = null) : base(redisDb, key, subscribeTimeout) => MessageHandler = messageHandler;
public RedisTaskSub(RedisDb redisDb, RedisSubKey key, TimeSpan?subscribeTimeout = null) : base(redisDb, key, subscribeTimeout) => Reset();
public RedisChannelSub(RedisDb redisDb, RedisSubKey key, Channel <RedisValue>?channel = null, TimeSpan?subscribeTimeout = null) : base(redisDb, key, subscribeTimeout) => _channel = channel ?? Channel.CreateUnbounded <RedisValue>(