public async void Run(IBackgroundTaskInstance taskInstance) { _deferral = taskInstance.GetDeferral(); taskInstance.Canceled += TaskInstance_Canceled; try { _logger = new SyslogLogger(); _logger.Info("Starting weather station service"); } catch (Exception ex) { throw ex; } try { _sensorsClient = new RinsenOneWireClient(); _reportingClient = new WebReportingClient(_logger); if (_reportingClient.SupportsSensorsUpdate) { _logger.Info("Sending sensors info is allowed, updating sensors info"); var sensorIds = _sensorsClient.ListSensors(); await _reportingClient.UpdateSensors(sensorIds); } _logger.Info("Initializing sensors reading timer"); _timer = new Timer(TemperatureCallback, null, 0, 5 * 60 * 1000); _logger.Info("Timer successfully initialized"); } catch (Exception ex) { _logger.Critical(ex.ToString()); _logger.Info("Critical exception occured while reporting sensors, closing"); _deferral.Complete(); return; } _logger.Info("Entering service loop"); while (!_isClosing) { Task.Delay(2000).Wait(); } _logger.Info("Exiting service loop"); }
private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason) { _logger.Info("Task was cancelled, reason: " + reason); _isClosing = true; if (_timer != null) { _timer.Dispose(); _timer = null; } if (_sensorsClient != null) { var disposable = _sensorsClient as IDisposable; if (disposable != null) { disposable.Dispose(); } _sensorsClient = null; } if (_reportingClient != null) { var disposable = _reportingClient as IDisposable; if (disposable != null) { disposable.Dispose(); } _reportingClient = null; } if (_logger != null) { var disposable = _logger as IDisposable; if (disposable != null) { disposable.Dispose(); } _logger = null; } if (_deferral != null) { _deferral.Complete(); _deferral = null; } }