public override bool TryLock(TimeSpan timespan) { var caller = Thread.CurrentThread; lock (this) { if (GetHold(caller)) return true; } var n = new WaitNode(); return n.DoTimedWait(this, timespan); }