/// <summary>Adds a waiter for a <see cref="Select"/></summary> void ISelectable.AddWaiter(Waiter waiter) { lock (_items) { Queue.Enqueue(ref _selects, waiter); // if there values waiting to be received then signal the queue to wake up if (!_items.IsEmpty) { waiter.SetResult(true); } } }
/// <summary>Adds a waiter for a <see cref="Select"/></summary> void ISelectable.AddWaiter(Waiter waiter) { lock (_gate) { Queue.Enqueue(ref _selects, waiter); // if there is a waiting sender then signal the select to wake up if (_senders.Head != null) { waiter.SetResult(true); } } }