diff --git a/Source/MQTTnet/Client/MqttClient.cs b/Source/MQTTnet/Client/MqttClient.cs index 9be1b725..fc0d299c 100644 --- a/Source/MQTTnet/Client/MqttClient.cs +++ b/Source/MQTTnet/Client/MqttClient.cs @@ -523,7 +523,11 @@ namespace MQTTnet.Client if (timeWithoutPacketSent > keepAlivePeriod) { - await PingAsync(cancellationToken).ConfigureAwait(false); + using (var timeoutCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken)) + { + timeoutCancellationTokenSource.CancelAfter(Options.Timeout); + await PingAsync(timeoutCancellationTokenSource.Token).ConfigureAwait(false); + } } // Wait a fixed time in all cases. Calculation of the remaining time is complicated