Пример #1
0
  public Disposable schedulePeriodicallyDirect(
      Runnable run, long initialDelay, long period, TimeUnit unit) {
    ArrayCompositeResource<Disposable> acr = new ArrayCompositeResource<>(2, Disposable::dispose);
    Worker w = createWorker();
    acr.lazySet(0, w);

    Runnable decoratedRun = RxJavaPlugins.onSchedule(run);

    acr.setResource(
        1,
        w.schedulePeriodically(
            () -> {
              try {
                decoratedRun.run();
              } catch (final Throwable e) {
                // make sure the worker is released if the run crashes
                acr.dispose();
                throw e;
              }
            },
            initialDelay,
            period,
            unit));

    return acr;
  }