diff --git a/Source/MQTTnet/Client/MqttClient.cs b/Source/MQTTnet/Client/MqttClient.cs index 9be1b72529b6e46eaa8b4116c98433965b417a20..fc0d299cbfb8822a4d3671e3d5c2be3f7cdc8cad 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