public void Release(RequestEvent @event) { if (@event.Owner != this) { throw new InvalidOperationException("not owned by this"); } if (@event.IsReleased) { return; } @event.Release(); if ([email protected]) //reneg { _waiting.Remove(@event); return; } _using--; if (_waiting.Count > 0) { RequestEvent first = _waiting.First.Value; _waiting.RemoveFirst(); _using++; first.Fire(); } }
public RequestEvent Request() { var e = new RequestEvent(this); if (_using < _capacity) { _using++; e.Fire(); } else { _waiting.AddLast(e); } return(e); }