diff --git a/Source/MQTTnet/Client/MqttClient.cs b/Source/MQTTnet/Client/MqttClient.cs index 85a8fde..75d4e99 100644 --- a/Source/MQTTnet/Client/MqttClient.cs +++ b/Source/MQTTnet/Client/MqttClient.cs @@ -142,14 +142,17 @@ namespace MQTTnet.Client ThrowIfDisposed(); - var disconnectIsPending = DisconnectIsPending(); + if (DisconnectIsPending()) + { + return; + } try { _disconnectReason = MqttClientDisconnectReason.NormalDisconnection; _cleanDisconnectInitiated = true; - if (!disconnectIsPending && _isConnected) + if (_isConnected) { var disconnectPacket = _adapter.PacketFormatterAdapter.DataConverter.CreateDisconnectPacket(options); await SendAsync(disconnectPacket, cancellationToken).ConfigureAwait(false); @@ -157,10 +160,7 @@ namespace MQTTnet.Client } finally { - if (!disconnectIsPending) - { - await DisconnectInternalAsync(null, null, null).ConfigureAwait(false); - } + await DisconnectInternalAsync(null, null, null).ConfigureAwait(false); } } @@ -225,7 +225,7 @@ namespace MQTTnet.Client ThrowIfDisposed(); ThrowIfNotConnected(); - + var publishPacket = _adapter.PacketFormatterAdapter.DataConverter.CreatePublishPacket(applicationMessage); switch (applicationMessage.QualityOfServiceLevel) @@ -312,7 +312,7 @@ namespace MQTTnet.Client async Task DisconnectInternalAsync(Task sender, Exception exception, MqttClientAuthenticateResult authenticateResult) { var clientWasConnected = _isConnected; - + TryInitiateDisconnect(); _isConnected = false; @@ -572,7 +572,7 @@ namespace MQTTnet.Client if (!DisconnectIsPending()) { - await DisconnectInternalAsync(_packetReceiverTask, null, null); + await DisconnectInternalAsync(_packetReceiverTask, null, null).ConfigureAwait(false); } } else if (packet is MqttAuthPacket authPacket) @@ -634,7 +634,7 @@ namespace MQTTnet.Client { try { - var publishPacketDequeueResult = await _publishPacketReceiverQueue.TryDequeueAsync(cancellationToken); + var publishPacketDequeueResult = await _publishPacketReceiverQueue.TryDequeueAsync(cancellationToken).ConfigureAwait(false); if (!publishPacketDequeueResult.IsSuccess) { return;