HikariThreading.ThreadManager.EnqueueTask C# (CSharp) Method

EnqueueTask() private method

Enqueues a task to be run when the next thread is available.
private EnqueueTask ( ITask task ) : void
task ITask The task to run.
return void
        internal override void EnqueueTask( ITask task )
        {
            // Rather than calling the base class we completely override to save
            // some time on the lock statement.
            lock ( workLock )
            {
                waiting.Enqueue(task);
                waitingSpawns.Enqueue(DateTime.Now);
            }
        }

Usage Example

Ejemplo n.º 1
0
        public void CreatesNewThreadsWhenMoreThanAskedForWorkItems( )
        {
            ThreadManager tm = new ThreadManager(TimeSpan.MinValue, TimeSpan.MaxValue,
                2, TimeSpan.MaxValue);
            int i = -2;
            int cur_threads = tm.NumThreads;
            for ( int j = 0; j < 3; j++ )
                tm.EnqueueTask(new ActionTask(( _ ) => i++, false));
            bool result = tm.SpawnThreadIfNeeded();
            Assert.IsTrue(result, "Did not report that it spawned more threads.");
            Assert.IsTrue(cur_threads < tm.NumThreads, "Did not actually spawn more threads.");

            ThreadManager tm2 = new ThreadManager(TimeSpan.MinValue, TimeSpan.MaxValue,
                6, TimeSpan.MaxValue);
            cur_threads = tm2.NumThreads;
            for ( i = 0; i < 3; i++ )
                tm2.EnqueueTask(new ActionTask(( _ ) => i++, false));
            result = tm2.SpawnThreadIfNeeded();
            Assert.IsFalse(result, "Reported that it spawned more threads before reaching the max queue length.");
            Assert.IsTrue(cur_threads == tm2.NumThreads, "Spawned a new thread before reaching the max queue length.");
            for ( i = 0; i < 3; i++ )
                tm2.EnqueueTask(new ActionTask(( _ ) => i++, false));
            result = tm2.SpawnThreadIfNeeded();
            Assert.IsTrue(result, "Did not report that it spawned more threads.");
            Assert.IsTrue(cur_threads < tm2.NumThreads, "Did not actually spawn more threads.");
        }
All Usage Examples Of HikariThreading.ThreadManager::EnqueueTask