public async Task ExecuteAsync(string clientId, IPacket input, IMqttChannel <IPacket> channel) { if (input.Type != MqttPacketType.Disconnect) { return; } await Task.Run(() => { Disconnect disconnect = input as Disconnect; _tracer.Info(ServerProperties.DisconnectFlow_Disconnecting(clientId)); _willRepository.Delete(clientId); ClientSession session = _sessionRepository.Read(clientId); if (session == null) { throw new MqttException(ServerProperties.SessionRepository_ClientSessionNotFound(clientId)); } if (session.Clean) { _sessionRepository.Delete(session.Id); _tracer.Info(ServerProperties.Server_DeletedSessionOnDisconnect(clientId)); } _connectionProvider.RemoveConnection(clientId); }); }