public void TestInterruptOnDispose() { object syncObj = new object(); using (var testInst = new ConditionVariable(syncObj)) { int exitCount = 0; var task = Task.Run(() => { try { using (var waiter = testInst.Enter()) { waiter.Wait(_ => false, (object)null); } } catch (OperationInterruptedException) { } Interlocked.Increment(ref exitCount); }); TimingAssert.AreEqual(10000, 1, () => testInst.WaiterCount); testInst.Dispose(); TimingAssert.AreEqual(10000, 1, () => Volatile.Read(ref exitCount)); task.Wait(); } }