Windows Services: цикл OnStart - я должен делегировать?

Как проверить, существует ли переменная

Это довольно пуленепробиваемое решение для тестирования, если переменная существует и была инициализирована:

var setOrNot = typeof variable !== typeof undefined;

Она наиболее часто используется в сочетание с тернарным оператором для установки значения по умолчанию в случае, если некоторая переменная не была инициализирована:

var dark = typeof darkColor !== typeof undefined ? darkColor : "black";

Проблемы с инкапсуляцией

К сожалению , вы не можете просто инкапсулировать свой чек в функцию.

Вы можете подумать о том, чтобы сделать что-то вроде этого:

function isset(variable) {
    return typeof variable !== typeof undefined;
}

Однако это приведет к ошибке ссылки, если вы вызываете например. isset(foo) и переменная foo не определены, потому что вы не можете пройти по несуществующей переменной к функции:

Uncaught ReferenceError: foo не определен

blockquote>

Тестирование неопределенных параметров функции

Хотя наша функция isset не может использоваться для проверки наличия или отсутствия переменной (по причинам, описанным выше), это позволяет нам проверьте, не определены ли параметры функции:

var a = '5';

var test = function(x, y) {
    console.log(isset(x));
    console.log(isset(y));
};

test(a);

// OUTPUT :
// ------------
// TRUE
// FALSE

Несмотря на то, что никакое значение для y не передается по функции test, наша функция isset отлично работает в этом контексте, поскольку y известно в функции test как значение undefined.

20
задан Rob Stevenson-Leggett 16 March 2009 в 10:52
поделиться

2 ответа

OnStart должен только запускаться работа; это не ответственно за то, что сделало его. Это обычно означает порождать новый поток, чтобы сделать фактическую работу. Ожидается, что OnStart завершается быстро. Например:

    public void OnStart(string[] args) // should this be override?
    {
        var worker = new Thread(DoWork);
        worker.Name = "MyWorker";
        worker.IsBackground = false;
        worker.Start();
    }
    void DoWork()
    {
        // do long-running stuff
    }
40
ответ дан 29 November 2019 в 23:30
поделиться

Метод OnStart не должен блокироваться. Необходимо породить рабочий поток, который сделает задание. Вы могли также смотреть на класс FileSystemWatcher для сканирования для уведомлений об изменении файловой системы.

6
ответ дан 29 November 2019 в 23:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: