diff --git a/src/Foundatio.Redis/Queues/RedisQueue.cs b/src/Foundatio.Redis/Queues/RedisQueue.cs index dd718cd..368a324 100644 --- a/src/Foundatio.Redis/Queues/RedisQueue.cs +++ b/src/Foundatio.Redis/Queues/RedisQueue.cs @@ -809,7 +809,10 @@ private LoadedLuaScript GetScript(LoadedLuaScript? script) // IConnectionMultiplexer supports IAsyncDisposable since SE.Redis 2.6.66. public override void Dispose() { - base.Dispose(); + if (IsDisposed) + return; + + SignalDispose(); _connectionMultiplexer.ConnectionRestored -= ConnectionMultiplexerOnConnectionRestored; if (_isSubscribed) @@ -853,6 +856,7 @@ public override void Dispose() } WaitForMaintenanceTask(); + base.Dispose(); _cache.Dispose(); } diff --git a/tests/Foundatio.Redis.Tests/Queues/RedisQueueTests.cs b/tests/Foundatio.Redis.Tests/Queues/RedisQueueTests.cs index 0a4115a..35754d2 100644 --- a/tests/Foundatio.Redis.Tests/Queues/RedisQueueTests.cs +++ b/tests/Foundatio.Redis.Tests/Queues/RedisQueueTests.cs @@ -128,6 +128,12 @@ public override Task DequeueAsync_WithDispose_AutoAbandonsEntryAsync() return base.DequeueAsync_WithDispose_AutoAbandonsEntryAsync(); } + [Fact] + public override Task Dispose_WithMaintenanceRunning_DoesNotThrowObjectDisposedException() + { + return base.Dispose_WithMaintenanceRunning_DoesNotThrowObjectDisposedException(); + } + [Fact] public override Task DequeueWaitWillGetSignaledAsync() {