한 사용자가 대기열을 차단할 수 있어야하는 항목의 대기열을 처리해야하며 대기열의 항목을 어떤 순서로 처리해야합니다. 저는이 일을하기 위해 자주 수업을 씁니다. 그러나 제네릭 버전이 있어야한다고 생각했지만 찾지 못했습니다.일반 C# 라운드 로빈 (분할/정렬 된) 대기열
그래서 내가 유형을 지정할 수있는 큐 클래스를 찾고 있는데, 큐와 큐에 객체를 추가 할 수있는 순서로 파티션과 선택기를위한 선택기를 찾고 객체를 다시 가져올 때 얻을 수 있습니다. 내 주문 지정자가 주문한 다음 파티션의 첫 번째 개체입니다.
예를 들어, 나는 분할하는 방법과 큐 정렬 방법을 지정하는 다음과 같이 부를 것이다 :
var queue = new RoundRobinQueue<Message>(
_ => _.UserID,
_ => _.SendDate
);
을 내가 메시지의 많은 추가 한 후, 나는 내 대기열 및 프로세스의 항목을 Parallel.ForEach
수 있습니다 가장 빠른 순서대로 SendDate
다음 User
을 입력하십시오. 그렇게하면 한 사용자가 느린 경우 항목이 하나의 스레드 만 가져 오기 때문에 항목이 대기열을 차단하지 않지만 한 명의 사용자 만있는 경우 그는 모든 스레드를 가져 오는 유일한 파티션입니다.
전을 보았지만 C#에서는 일반 구현을 찾을 수 없었습니다. 어떤 아이디어?
foreach에는 IEnumerable이 필요합니다. 그러나 foreach는이 콜렉션, 라운드 로빈 대기열이 항상 다음에있을 경우 언제 종료해야 하는지를 알 수 있습니까? 당신은 어떤 카운트 또는 타임 아웃에 의해 그것을 깰 수 있습니다. 그러나이 수업의 사용자는 잘못 사용하거나 심지어는 혼자서 사용해도 상처를 줄 수 있습니다. 예 : 이 큐는 코드에서 IEnumerable로 전달 될 수 있으며 IEnumerable을 가져 와서 foreach를 수행하는 하나의 메소드로 전달됩니다. – Ryan
Iterator를 반환하는'IEnumerable'에 대한 확장 메서드가 왜 필요하지 않습니까? – PPC