/// <summary> 
 /// Obtains and ignores the next task that the <paramref name="executor"/>
 /// would otherwise execute, if one is immediately available,
 /// and then retries execution of task <paramref name="runnable"/>,
 /// unless the <paramref name="executor"/> is shut down, in which
 /// case task <paramref name="runnable"/> is instead discarded.
 /// </summary>
 /// <param name="runnable">
 /// The <see cref="IRunnable"/> task requested to be executed.
 /// </param>
 /// <param name="executor">
 /// The <see cref="ThreadPoolExecutor"/> attempting to execute this
 /// task.
 /// </param>
 public virtual void RejectedExecution(IRunnable runnable, ThreadPoolExecutor executor)
 {
     if (executor.IsShutdown) return;
     IRunnable head;
     executor.Queue.Poll(out head);
     executor.Execute(runnable);
 }