多くの場合、1 人のユーザーがキューをブロックできず、キュー内のアイテムを特定の順序で処理する必要があるアイテムのキューを処理する必要があります。これを行うクラスを頻繁に作成しますが、一般的なバージョンが必要だと思いましたが、見つかりません。
だから私は、タイプ、パーティションのセレクター、およびオブジェクトをキューに追加できるように並べ替えるセレクターを指定できるキュークラスを探しています。オブジェクトを元に戻すと、最初のオブジェクトを取得します私の順序指定子によって順序付けられた次のパーティション。
たとえば、キューの分割方法と並べ替え方法を指定して、次のように呼び出します。
var queue = new RoundRobinQueue<Message>(
_ => _.UserID,
_ => _.SendDate
);
多くのメッセージを追加した後Parallel.ForEach
、キュー内のアイテムを処理しSendDate
、次のUser
. そうすれば、1 人のユーザーが遅い場合、そのユーザーは 1 つのスレッドしか取得しないため、アイテムがキューをブロックすることはありませんが、ユーザーが 1 人しかいない場合は、そのユーザーが唯一のパーティションであるため、すべてのスレッドを取得します。
私はいろいろ調べましたが、これについて C# で適切な一般的な実装を見つけることができませんでした。何か案は?