Есть ли способ получить уровень рекурсии блокировки c # - PullRequest
0 голосов
/ 17 января 2019

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

lock (x)
{
    if (getlLockLevel(x) > 1)   // Do not work, is the method I want to know
    {
        throw new Exception("ERROR : Current thread is recursive");
    }

    // My code...

}

1 Ответ

0 голосов
/ 18 января 2019

Я использовал предложение Алекса К. изменить свой код следующим образом:

if (Monitor.IsEntered(x)   // That's what I want to check
{
    throw new Exception("ERROR : Current thread is reentrant");
}

lock (x)
{
    // My code...

}

Теперь я могу определить, является ли поток повторно входящим в секцию lock (), и обработать его при необходимости.

Спасибо, Алекс.

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