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 被移除的物件。 若無物件可移除,該值未指定。
傳回
true 若元素被移除並從 成功返回 ConcurrentQueue<T> ;否則, false。
備註
ConcurrentQueue<T> 所有同步皆由內部處理。 如果兩個執行緒在完全相同的時刻呼叫 TryDequeue ,則兩個操作都不會被阻塞。 當偵測到兩個執行緒間發生衝突時,其中一個執行緒必須重新嘗試取回下一個元素,同步則由內部處理。
TryDequeue 嘗試從佇列中移除元素。 若方法成功,該項目將被移除並返回 true;否則,返回 false。 這是在佇列中其他操作原子層面上發生的。 如果佇列中填充了像 和 q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); 這樣的程式碼,兩個執行緒同時嘗試將元素出隊,一個執行緒會出隊 a ,另一個執行緒會去排隊 b。 兩個呼叫 TryDequeue 都會回傳 true,因為它們都成功將元素出隊。 如果每個執行緒回去排隊一個額外元素,其中一個執行緒會去排 c 隊並回傳 true,而另一執行緒會發現該佇列為空並回傳 false。