2014-04-08 1 views
2

대기열을 사용하여 정의한 클래스의 멤버를 저장하고 있습니다. 특정 고정 된 시간 간격 후에, 나는 큐에 추가 된 개체가 있는지 평가해야하며 추가 된 개체를 처리하여 필요한 신호를 얻습니다.foreach를 사용하지 않고 C#의 Queue (System.Collections에 정의 된 Queue 클래스 용)의 특정 요소로 건너 뛰십시오.

이제 모든 큐 구성원을 반복 할 것이므로 foreach 루프를 사용하고 싶지 않습니다. 그냥 마지막으로 처리 된 요소로 건너 뛰는 방법을 원합니다. 따라서 신선한 정보를 처리 할 수 ​​있습니다.

대기열은 대기열에서 가져 오지만 고정 된 시간 (예 : 200 개 요소)에 도달 한 후에 만 ​​대기열에서 가져옵니다. foreach는/열거하지 않고이 작업을 수행 할 수있는 좋은 방법이

내가 정보를 처리/대기 큐 해제하고 다른 하나 개의 스레드를 사용하고 뭐죠 그래서 마지막 200 개 요소는

을 그대로 유지됩니다. 200 요소가되면 큐의 해당 개수가 유지됩니다. foreach를 사용할 수는 있지만 이전에 직접 처리 한 요소로 건너 뛰고 일부 처리를 저장하려고합니다.

+0

이것은 잠금/스레드와 어떤 관련이 있습니까? 이것은 프로듀서/소비자에 대한 또 다른 테이크인가? – BradleyDotNET

+0

"큐는 대기열에서 제외되지만, 고정 된 200 개의 요소에 도달 한 후에 만 ​​처리됩니다. 처리 된 요소는 거의 유지하지 않을 것입니다." 따라서 대기열은 항목을 200 개까지 가져온 다음 항목을 지 웁니다 (대부분). 일반적으로 제한된 리소스로 흐름을 제어하는 ​​데 사용되는 큐의 정상적인 동작처럼 들리지 않습니다. 'List '으로 전환하고 인덱싱을 사용할 수 있습니다. – itsme86

+0

처리 된 요소 인덱스를 저장하고 나중에 사용하지 않습니까? – HackerMan

답변

0

하나의 방법은 큐를 큐에서 대기열에서 제외하고 처리하는 것입니다. "처리 된 항목"을 저장해야하는 경우 다른 대기열/목록/임의의 항목에 넣으십시오.

적절한 멀티 스레드 액세스가 필요한 경우 ("잠금"태그 기반) - ConcurrentQueue을 사용하십시오.