From 4838da48ef1731ab02825a21cd0df57a42b1a9a3 Mon Sep 17 00:00:00 2001 From: Christian Kratky Date: Tue, 29 May 2018 21:45:25 +0200 Subject: [PATCH] Replace a manual lock with the lock class. --- .../ManagedClient/ManagedMqttClient.cs | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/Frameworks/MQTTnet.NetStandard/ManagedClient/ManagedMqttClient.cs b/Frameworks/MQTTnet.NetStandard/ManagedClient/ManagedMqttClient.cs index 7cad3560..804b1861 100644 --- a/Frameworks/MQTTnet.NetStandard/ManagedClient/ManagedMqttClient.cs +++ b/Frameworks/MQTTnet.NetStandard/ManagedClient/ManagedMqttClient.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using MQTTnet.Client; using MQTTnet.Diagnostics; using MQTTnet.Exceptions; +using MQTTnet.Internal; using MQTTnet.Protocol; namespace MQTTnet.ManagedClient @@ -15,7 +16,7 @@ namespace MQTTnet.ManagedClient { private readonly BlockingCollection _messageQueue = new BlockingCollection(); private readonly Dictionary _subscriptions = new Dictionary(); - private readonly SemaphoreSlim _subscriptionsSemaphore = new SemaphoreSlim(1, 1); + private readonly AsyncLock _subscriptionsLock = new AsyncLock(); private readonly List _unsubscriptions = new List(); private readonly IMqttClient _mqttClient; @@ -117,8 +118,7 @@ namespace MQTTnet.ManagedClient { if (topicFilters == null) throw new ArgumentNullException(nameof(topicFilters)); - await _subscriptionsSemaphore.WaitAsync().ConfigureAwait(false); - try + using (await _subscriptionsLock.LockAsync(CancellationToken.None).ConfigureAwait(false)) { foreach (var topicFilter in topicFilters) { @@ -126,16 +126,11 @@ namespace MQTTnet.ManagedClient _subscriptionsNotPushed = true; } } - finally - { - _subscriptionsSemaphore.Release(); - } } public async Task UnsubscribeAsync(IEnumerable topics) { - await _subscriptionsSemaphore.WaitAsync().ConfigureAwait(false); - try + using (await _subscriptionsLock.LockAsync(CancellationToken.None).ConfigureAwait(false)) { foreach (var topic in topics) { @@ -146,16 +141,12 @@ namespace MQTTnet.ManagedClient } } } - finally - { - _subscriptionsSemaphore.Release(); - } } public void Dispose() { _messageQueue?.Dispose(); - _subscriptionsSemaphore?.Dispose(); + _subscriptionsLock?.Dispose(); _connectionCancellationToken?.Dispose(); _publishingCancellationToken?.Dispose(); } @@ -294,8 +285,7 @@ namespace MQTTnet.ManagedClient List subscriptions; List unsubscriptions; - await _subscriptionsSemaphore.WaitAsync().ConfigureAwait(false); - try + using (await _subscriptionsLock.LockAsync(CancellationToken.None).ConfigureAwait(false)) { subscriptions = _subscriptions.Select(i => new TopicFilter(i.Key, i.Value)).ToList(); @@ -304,10 +294,6 @@ namespace MQTTnet.ManagedClient _subscriptionsNotPushed = false; } - finally - { - _subscriptionsSemaphore.Release(); - } if (!subscriptions.Any() && !unsubscriptions.Any()) {