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합니다.