public async Task StartAsync(IManagedMqttClientOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (options.ClientOptions == null) { throw new ArgumentException("The client options are not set.", nameof(options)); } if (!options.ClientOptions.CleanSession) { throw new NotSupportedException("The managed client does not support existing sessions."); } if (_connectionCancellationToken != null) { throw new InvalidOperationException("The managed client is already started."); } _options = options; if (_options.Storage != null) { _storageManager = new ManagedMqttClientStorageManager(_options.Storage); await _storageManager.LoadQueuedMessagesAsync().ConfigureAwait(false); } _connectionCancellationToken = new CancellationTokenSource(); #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed Task.Run(async() => await MaintainConnectionAsync(_connectionCancellationToken.Token).ConfigureAwait(false), _connectionCancellationToken.Token).ConfigureAwait(false); #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed _logger.Info <ManagedMqttClient>("Started"); }