Блокировка на основе флага - PullRequest
0 голосов
/ 11 июля 2019

Я хочу заблокировать несколько строк кода на основе flag из конфигурации приложения.Итак, основываясь на том, что flag я запускаю приложение асинхронно или нет.Поэтому мне нужно заблокировать выполнение нескольких строк кода, проверив flag.Поэтому мне нужно написать повторяющийся код.Ниже приведен пример

if (flag) {
    lock(dataLock){
        //few lines of code
    }
} else {
    //repeat the above code gain here (few lines of code)
}

Есть ли альтернативный способ сохранения повторных кодов?

Ответы [ 4 ]

1 голос
/ 12 июля 2019

Лучше всего подходит Monitor.Enter, но вы также можете сделать это:

Action fewLinesOfCode = () =>
{
    //few lines of code
};

if (flag)
{
    lock (dataLock)
    {
        fewLinesOfCode();
    }
}
else
{
    fewLinesOfCode();
}
1 голос
/ 11 июля 2019

Вы можете вызывать функцию со своим внешним кодом изнутри блокировки и даже из оператора else.Это, по крайней мере, уменьшит ваши накладные расходы и повторяющийся код.

if(flag==true){
    lock(dataLock){
        fewLines();
    }
}else{
    fewLines();
}

[...]

public void fewLines(){
   // put your few lines here.
}

, который будет запускать функцию из заблокированного контекста.

1 голос
/ 11 июля 2019
if (flag)
    Monitor.Enter(dataLock);

// few lines of code

if (Monitor.IsEntered(dataLock))
    Monitor.Exit(dataLock);
1 голос
/ 11 июля 2019

Использовать Monitor.Enter вместо Lock () {}?Войдите и выйдите с оператором if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...