Skip to content

Commit 016bbd8

Browse files
committed
fix dispose order
1 parent 3accf7c commit 016bbd8

2 files changed

Lines changed: 9 additions & 15 deletions

File tree

‎Common/Redis/QueueHelper.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public static Task ConsumeQueue(
1313
{
1414
return OsTask.Run(async () =>
1515
{
16-
while (!ct.IsCancellationRequested)
16+
while (!ct.IsCancellationRequested && !queue.Completion.IsCompleted)
1717
{
1818
var msg = await queue.ReadAsync(ct);
1919
if (!msg.Message.HasValue) continue;

‎LiveControlGateway/LifetimeManager/HubLifetime.cs‎

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,6 @@ public sealed class HubLifetime : IAsyncDisposable
5858
private readonly SemaphoreSlim _liveControlClientsLock = new(1);
5959

6060
private ChannelMessageQueue? _deviceMsgQueue;
61-
private Task? _deviceMsgConsumerTask;
62-
63-
private Task? _updateLoopTask;
6461

6562
/// <summary>
6663
/// DI Constructor
@@ -166,10 +163,13 @@ public async Task<bool> InitAsync(CancellationToken cancellationToken)
166163
return false;
167164
}
168165

169-
_updateLoopTask = OsTask.Run(UpdateLoop);
166+
#pragma warning disable CS4014
167+
OsTask.Run(UpdateLoop);
168+
170169

171170
_deviceMsgQueue = await _subscriber.SubscribeAsync(_deviceMsgChannel);
172-
_deviceMsgConsumerTask = QueueHelper.ConsumeQueue(_deviceMsgQueue, ConsumeDeviceQueue, _logger, _cancellationSource.Token);
171+
QueueHelper.ConsumeQueue(_deviceMsgQueue, ConsumeDeviceQueue, _logger, _cancellationSource.Token);
172+
#pragma warning restore CS4014
173173

174174
_state = HubLifetimeState.Idle; // We are fully setup, we can go back to idle state
175175

@@ -527,18 +527,12 @@ public async ValueTask DisposeAsync()
527527
{
528528
if (_disposed) return;
529529
_disposed = true;
530-
531-
await _subscriber.UnsubscribeAsync(_deviceMsgChannel);
530+
532531
await _cancellationSource.CancelAsync();
533532

534-
// ensure the consumer loop ends
535-
if (_deviceMsgConsumerTask is not null)
536-
{
537-
try { await _deviceMsgConsumerTask; } catch { /* ignore */ }
538-
}
539-
if (_updateLoopTask is not null)
533+
if (_deviceMsgQueue is not null)
540534
{
541-
try { await _updateLoopTask; } catch { /* ignore */ }
535+
await _deviceMsgQueue.UnsubscribeAsync();
542536
}
543537

544538
await DisposeLiveControlClients();

0 commit comments

Comments
 (0)