code: @NonNull
      public Disposable schedulePeriodicallyDirect(@NonNull Runnable run, long initialDelay, long period, @NonNull TimeUnit unit) {
          final Worker w = createWorker();
  
          final Runnable decoratedRun = RxJavaPlugins.onSchedule(run);
  
          PeriodicDirectTask periodicTask = new PeriodicDirectTask(decoratedRun, w);
  
          Disposable d = w.schedulePeriodically(periodicTask, initialDelay, period, unit);
          if (d == EmptyDisposable.INSTANCE) {
              return d;
          }
  
          return periodicTask;
      }
docs: Schedules a periodic execution of the given task with the given initial time delay and repeat period.
  
  <p>
  This method is safe to be called from multiple threads but there are no
  ordering guarantees between tasks.
  
  <p>
  The periodic execution is at a fixed rate, that is, the first execution will be after the
  {@code initialDelay}, the second after {@code initialDelay + period}, the third after
  {@code initialDelay + 2 * period}, and so on.
  
  @param run the task to schedule
  @param initialDelay the initial delay amount, non-positive values indicate non-delayed scheduling
  @param period the period at which the task should be re-executed
  @param unit the unit of measure of the delay amount
  @return the Disposable that let's one cancel this particular delayed task.
  @since 2.0