internal void InternalExecute (Runnable r, bool checkShutdown)
{
lock (pendingTasks) {
if (shutdown && checkShutdown)
throw new InvalidOperationException ();
if (runningThreads < corePoolSize) {
StartPoolThread ();
}
else if (freeThreads > 0) {
freeThreads--;
}
else if (runningThreads < maxPoolSize) {
StartPoolThread ();
}
pendingTasks.Enqueue (r);
ST.Monitor.PulseAll (pendingTasks);
}
}