Process all queued message before server stops (#1234)

* process all queued message befor server stops

* fix an issue

Co-authored-by: ablfzl <ablfzl21@outlook.com>
This commit is contained in:
Ablfzl Edgelolli
2021-09-19 13:01:47 +02:00
committed by GitHub
co-authored by ablfzl
parent 68f1043ef5
commit dd0aba0640
@@ -272,11 +272,12 @@ namespace MQTTnet.Server.Internal
async Task TryProcessQueuedApplicationMessagesAsync(CancellationToken cancellationToken) async Task TryProcessQueuedApplicationMessagesAsync(CancellationToken cancellationToken)
{ {
while (!cancellationToken.IsCancellationRequested) //make sure all queued messages are proccessed befor server stops
while (!cancellationToken.IsCancellationRequested || _messageQueue.Any())
{ {
try try
{ {
await TryProcessNextQueuedApplicationMessageAsync(cancellationToken).ConfigureAwait(false); await TryProcessNextQueuedApplicationMessageAsync().ConfigureAwait(false);
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
@@ -288,16 +289,14 @@ namespace MQTTnet.Server.Internal
} }
} }
async Task TryProcessNextQueuedApplicationMessageAsync(CancellationToken cancellationToken) async Task TryProcessNextQueuedApplicationMessageAsync()
{ {
try try
{ {
cancellationToken.ThrowIfCancellationRequested();
MqttPendingApplicationMessage queuedApplicationMessage; MqttPendingApplicationMessage queuedApplicationMessage;
try try
{ {
queuedApplicationMessage = _messageQueue.Take(cancellationToken); queuedApplicationMessage = _messageQueue.Take();
} }
catch (ArgumentNullException) catch (ArgumentNullException)
{ {
@@ -370,9 +369,6 @@ namespace MQTTnet.Server.Internal
await InterceptApplicationMessageAsync(undeliveredMessageInterceptor, clientConnection, applicationMessage).ConfigureAwait(false); await InterceptApplicationMessageAsync(undeliveredMessageInterceptor, clientConnection, applicationMessage).ConfigureAwait(false);
} }
} }
catch (OperationCanceledException)
{
}
catch (Exception exception) catch (Exception exception)
{ {
_logger.Error(exception, "Unhandled exception while processing next queued application message."); _logger.Error(exception, "Unhandled exception while processing next queued application message.");