TryEnter
TryEnter с таймаутом 0 не ждёт. Если тот же поток уже вошёл и не вышел, повтор даёт false.
Синтаксис
bool ok = Monitor.TryEnter(gate, 0);
Пример
Давайте захватим свободный объект:
using System;
using System.Threading;
class Program
{
static void Main()
{
var gate = new object();
bool res = Monitor.TryEnter(gate, 0);
Console.WriteLine(res);
Monitor.Exit(gate);
}
}
Результат выполнения кода:
True
Пример
Давайте повторим TryEnter без Exit:
using System;
using System.Threading;
class Program
{
static void Main()
{
var gate = new object();
Monitor.Enter(gate);
bool res = Monitor.TryEnter(gate, 0);
Console.WriteLine(res);
Monitor.Exit(gate);
}
}
Результат выполнения кода:
False