public ScannerParametersQueryResult Execute(object markerAsync) { _logger.Info("======================================= GET PARAMS QUERY ========================================"); _logger.Info("Scanner index: " + _sourceIndex); ScannerSettings searchSetting = null; List <ISource> sources = null; if (Monitor.TryEnter(markerAsync)) { _logger.Debug("Enter to monitor"); try { var sourcesCount = _scannerManager.SourceCount; if (sourcesCount > 0) { //если выбранный источник существует, выбираем его; если нет - выбираем первый int sourceIndex; if (!_sourceIndex.HasValue || (_sourceIndex.Value > sourcesCount - 1)) { sourceIndex = 0; } else { sourceIndex = _sourceIndex.Value; } if (_cacheSettings.NeedUpdateNow(DateTime.UtcNow)) { _logger.Debug("Update cache"); _cacheSettings.Update(_scannerManager); } try { searchSetting = GetScannerSettings(sourceIndex); } catch (Exception e) { _logger.Error("Can't obtain scanner settings: " + e); } sources = _scannerManager.GetSources(); } } catch (Exception e) { return(new ScannerParametersQueryResult(string.Format("Ошибка при получении информации об источниках: {0}", e))); } finally { Monitor.Exit(markerAsync); } } else { return(new ScannerParametersQueryResult(string.Format("Не удалось получить информацию об источниках: сканер занят"))); } _logger.Info("Scan settings: " + (searchSetting == null? "": searchSetting.Serialize())); return(new ScannerParametersQueryResult(sources, searchSetting, _sourceIndex)); }