에 차단 그것은 모두에서 GetConsumingEnumerable()
스트림 및 일부 다른 기준에 (예 내에서 JobQueue
) BlockingCollection<T>
블록 실행이 가능한가?<T> BlockingCollection .GetConsumingEnumerable()의 추가 조건
사용 가능한 슬롯이있을 때만 항목을 소비 할 수있는 상태 인 availableSlots > 0
이 있습니다. 문제는 컬렉션에 항목이 있지만 조건이 거짓 일 때 foreach가 무기한 반복된다는 것입니다.
컬렉션을 availableSlots > 0
에서도 차단하지 못합니까?
foreach (var job in JobQueue.GetConsumingEnumerable())
{
if(availableSlots > 0)
{
JobHandler jobHandler = job;
Task.Factory.StartNew(() =>
{
ExecuteJob(jobHandler);
});
}
}
아마도이 모음을 잘못 사용하고 있습니다. 어떤 도움을 주셔서 감사합니다!
'경우 (availableSlots> 0)'이게 뭐야? 당신은 콜렉션 –
에서 꺼낸 요소들을 무시하고 있습니다. 시나리오를 기반으로 루프 밖에서 상태 점검을 이동하는 것이 더 낫습니다. 필요없는 품목은 소비하지 마십시오. –