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> 开头处移除并返回了元素,则为 true
;否则为 false
。
注解
ConcurrentQueue<T> 在内部处理所有同步。 如果两个线程正好在同一时间调用 TryDequeue,则不会阻止任一操作。 如果在两个线程之间检测到冲突,则一个线程必须再次尝试检索下一元素,并且将内部处理同步。
TryDequeue 尝试从队列中删除元素。 如果此方法成功,则将删除该项,并且此方法将返回 true
;否则将返回 false
。 对于队列中的其他操作而言,这将以原子方式发生。 如果队列是使用代码(如 q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c");
)填充的,并且两个线程同时尝试取消元素排队,则一个线程将取消 a
排队,而另一个线程将取消 b
排队。 对 TryDequeue 的两个调用均将返回 true
,因为它们都能取消元素排队。 如果每个线程都返回取消附加元素排队,则一个线程将取消 c
排队并返回 true
,而另一个线程将发现队列为空并返回 false
。