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));
        }