/// <summary>
 /// Schedules execution pending the completion of another task. This call uses overlapped
 /// I/O for scheduling.
 /// </summary>
 /// <param name="waitForTask">A task upon which this task is dependent. If null is given then
 /// this task is queued to the thread pool for immediate asynchronous execution.</param>
 /// <param name="timeoutMilliseconds">A timeout period for the wait. If the task does not start before the
 /// timeout period then a TimeoutException will be thrown when the IAsyncResult is read. The
 /// value of Timeout.Infinite may be used to wait forever.</param>
 public void ScheduledExecute(ParallelTask waitForTask, int timeoutMilliseconds)
 {
     if (waitForTask == null || waitForTask.IsCompleted) AsyncExecute();
     else this.ScheduledExecute(waitForTask.WaitHandle, timeoutMilliseconds);
 }
 /// <summary>
 /// Schedules execution pending the completion of another task. This call uses overlapped
 /// I/O for scheduling.
 /// </summary>
 /// <param name="waitForTask">A task upon which this task is dependent. If null is given then
 /// this task is queued to the thread pool for immediate asynchronous execution.</param>
 /// <param name="timeout">A timeout period for the wait. If the task does not start before the
 /// timeout period then a TimeoutException will be thrown when the IAsyncResult is read. The
 /// value of Timeout.Infinite may be used to wait forever.</param>
 public void ScheduledExecute(ParallelTask waitForTask, TimeSpan timeout)
 {
     if (waitForTask == null || waitForTask.IsCompleted) AsyncExecute();
     else this.ScheduledExecute(waitForTask.WaitHandle, timeout);
 }