public void TestEnterBlocksWhenLockedByAnotherThread() { long state = 0; var lock1 = Ignite.GetOrCreateLock(TestUtils.TestName); lock1.Enter(); // ReSharper disable once AccessToModifiedClosure var task = Task.Factory.StartNew(() => { var lock2 = Ignite.GetOrCreateLock(TestUtils.TestName); Interlocked.Increment(ref state); lock2.Enter(); Interlocked.Increment(ref state); lock2.Exit(); Interlocked.Increment(ref state); }); TestUtils.WaitForTrueCondition(() => Interlocked.Read(ref state) == 1); Assert.AreEqual(1, Interlocked.Read(ref state)); lock1.Exit(); task.Wait(); Assert.AreEqual(3, Interlocked.Read(ref state)); }