Skip to content

Commit ea3d6ed

Browse files
committed
feat: add TryDequeue
1 parent acfadfb commit ea3d6ed

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

queue/queue.go

+17
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,23 @@ func (q *Queue[T]) Dequeue() (val T, ok bool) {
8383
return item, true
8484
}
8585

86+
// TryDequeue removes an item from the front of the queue, similar to Dequeue.
87+
//
88+
// However, TryDequeue does NOT block if the queue is empty. It returns second value as false immediately if the queue is empty or closed.
89+
func (q *Queue[T]) TryDequeue() (val T, ok bool) {
90+
q.mu.Lock()
91+
defer q.mu.Unlock()
92+
93+
if q.isClosed || len(q.items) == 0 {
94+
return val, false
95+
}
96+
97+
item := q.items[0]
98+
q.items = q.items[1:]
99+
100+
return item, true
101+
}
102+
86103
// IsEmpty returns true if the queue is empty.
87104
func (q *Queue[T]) IsEmpty() bool {
88105
q.mu.RLock()

0 commit comments

Comments
 (0)