66
77namespace InEngine . Core . Queuing
88{
9- public class Dequeue
9+ public class Dequeue : IDisposable
1010 {
1111 IList < QueueAdapter > queueAdapters ;
1212 public CancellationTokenSource CancellationTokenSource { get ; set ; }
13- public int TaskCount { get ; set ; }
13+ public QueueSettings QueueSettings { get ; set ; }
1414
1515 public Dequeue ( )
1616 {
@@ -20,25 +20,28 @@ public Dequeue()
2020
2121 public async Task StartAsync ( )
2222 {
23+ if ( QueueSettings == null )
24+ QueueSettings = InEngineSettings . Make ( ) . Queue ;
25+
2326 // Create dequeue tasks for primary and secondary queues.
2427 var allTasks = new List < Task > ( ) ;
2528 Console . WriteLine ( "Start dequeue tasks for primary queue..." ) ;
26- allTasks . AddRange ( MakeTasks ( ) ) ;
29+ allTasks . AddRange ( MakeTasks ( true , QueueSettings . PrimaryQueueConsumers ) ) ;
2730 Console . WriteLine ( "Start dequeue tasks for secondary queue..." ) ;
28- allTasks . AddRange ( MakeTasks ( ) ) ;
31+ allTasks . AddRange ( MakeTasks ( false , QueueSettings . SecondaryQueueConsumers ) ) ;
2932 await Task . WhenAll ( allTasks ) ;
3033
3134 // Recover from restart, if necessary.
3235 QueueAdapter . Make ( ) . Recover ( ) ;
3336 QueueAdapter . Make ( true ) . Recover ( ) ;
3437 }
3538
36- public IList < Task > MakeTasks ( )
39+ IList < Task > MakeTasks ( bool useSecondaryQueue = false , int numberOfTasks = 0 )
3740 {
38- return Enumerable . Range ( 0 , TaskCount ) . Select ( ( i ) => {
41+ return Enumerable . Range ( 0 , numberOfTasks ) . Select ( ( i ) => {
3942 Console . WriteLine ( $ "Registering Dequeuer #{ i } ") ;
4043 return Task . Factory . StartNew ( ( ) => {
41- var queue = QueueAdapter . Make ( ) ;
44+ var queue = QueueAdapter . Make ( useSecondaryQueue , QueueSettings ) ;
4245 queue . Id = i ;
4346 queueAdapters . Add ( queue ) ;
4447 queue . Consume ( CancellationTokenSource . Token ) ;
0 commit comments