ConcurrentQueue<T>.TryDequeue(T) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
尝试删除并返回并发队列开头的对象。
public:
bool TryDequeue([Runtime::InteropServices::Out] T % result);
public bool TryDequeue(out T result);
member this.TryDequeue : 'T -> bool
Public Function TryDequeue (ByRef result As T) As Boolean
参数
- result
- T
此方法返回时,如果操作成功, result 则包含已删除的对象。 如果没有对象可供删除,则未指定该值。
返回
注解
ConcurrentQueue<T> 在内部处理所有同步。 如果两个线程在同一时刻调用 TryDequeue ,则两个线程都不会被阻止。 在两个线程之间检测到冲突时,一个线程必须重试以检索下一个元素,并在内部处理同步。
TryDequeue 尝试从队列中删除元素。 如果方法成功,则会删除该项,并且该方法返回 true;否则返回 false。 这在队列上的其他操作方面以原子方式发生。 如果队列填充了代码(例如 q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); ,两个线程同时尝试取消排队元素),则一个线程将取消排队 a ,另一个线程将取消 b排队。 两个调用 TryDequeue 都将返回 true,因为它们都能够取消对元素的排队。 如果每个线程返回到取消附加元素排队,则其中一个线程将取消 c 排队并返回 true,而另一个线程将找到队列为空并返回 false。