기본적으로 처리 할 객체의 정적 사용자 정의 대기열이 있습니다. 여러 스레드에서 대기중인 개체를 처리하는 단일 작업을 시작해야하며 모든 항목이 대기열에서 제외 될 때 작업이 중지됩니다.하나의 작업 만 비동기 적으로 시작하여 정적 대기열을 처리하고 완료되면 중지합니다.
일부 사이비 코드 : 내 사용자 정의 큐들은 특정 연령에 도달 할 때까지 기본적으로 아이템을 보유하고 큐 인 차이를 만드는 경우
static CustomQueue _customqueue;
static Task _processQueuedItems;
public static void EnqueueSomething(object something) {
_customqueue.Enqueue(something);
StartProcessingQueue();
}
static void StartProcessingQueue() {
if(_processQueuedItems != null) {
_processQueuedItems = new Task(() => {
while(_customqueue.Any()) {
var stuffToDequeue = _customqueue.Dequeue();
/* do stuff */
}
});
_processQueuedItems.Start();
}
if(_processQueuedItems.Status != TaskStatus.Running) {
_processQueuedItems.Start();
}
}
후 그들 큐에서 할 수 있습니다. 항목을 터치 할 때마다 타이머가 다시 시작됩니다. 나는이 작품이 잘 작동하는 것을 안다.
내가 고민하고있는 부분은 병렬 처리입니다. (분명히, 내가 여기서 뭘하는지 모르겠다.) 내가 원했던 것은 하나의 스레드가 완료 될 때까지 대기열을 처리 한 다음 사라지도록하는 것입니다. 다른 호출이 들어오지 않으면 새로운 스레드가 시작되지 않습니다.
나는 내 문제를 설명하기를 바랍니다.
감사합니다. 나는 그것이 존재한다는 것을 몰랐다. 호기심에서 그걸 어떻게 알았 니? 아마도 "X.0의 새로운 점"에 대한 기사 만 읽으면됩니다. –
@blesh System.Collections.Concurrent에는 조사 할 가치가있는 몇 가지 유용한 정보가 있습니다.이 내용은 http://msdn.microsoft.com/en-us/library/dd460718.aspx에 문서화되어 있습니다. 향후 내용은 http : /blogs.msdn.com/b/pfxteam/archive/2011/09/17/10212961.aspx –