/** * Construct a Disposable by wrapping a Future that is * cancelled exactly once when the Disposable is disposed. * @param future the Future to wrap * @return the new Disposable instance */ @NonNull public static Disposable fromFuture(@NonNull Future<?> future) { ObjectHelper.requireNonNull(future, "future is null"); return fromFuture(future, true); }
@Override public <T> Maybe<T> prepare(Request request, Supplier<? extends AsyncHandler<T>> handlerSupplier) { requireNonNull(request); requireNonNull(handlerSupplier); return Maybe.create(emitter -> { final AsyncHandler<?> bridge = createBridge(emitter, handlerSupplier.get()); final Future<?> responseFuture = asyncHttpClient.executeRequest(request, bridge); emitter.setDisposable(Disposables.fromFuture(responseFuture)); }); }
/** * Construct a Disposable by wrapping a Future that is * cancelled exactly once when the Disposable is disposed. * @param future the Future to wrap * @return the new Disposable instance */ @NonNull public static Disposable fromFuture(@NonNull Future<?> future) { ObjectHelper.requireNonNull(future, "future is null"); return fromFuture(future, true); }
@Test public void normal() { FutureTask<Object> ft = new FutureTask<Object>(Functions.EMPTY_RUNNABLE, null); Disposable d = Disposables.fromFuture(ft); assertFalse(d.isDisposed()); d.dispose(); assertTrue(d.isDisposed()); d.dispose(); assertTrue(d.isDisposed()); assertTrue(ft.isCancelled()); }
@Test public void interruptible() { FutureTask<Object> ft = new FutureTask<Object>(Functions.EMPTY_RUNNABLE, null); Disposable d = Disposables.fromFuture(ft, true); assertFalse(d.isDisposed()); d.dispose(); assertTrue(d.isDisposed()); d.dispose(); assertTrue(d.isDisposed()); assertTrue(ft.isCancelled()); }
@Override public Disposable scheduleDirect(Runnable run) { ExecutorService exec = get(); return Disposables.fromFuture(exec.submit(run)); }
@Override public Disposable scheduleDirect(Runnable run, long delay, TimeUnit unit) { ScheduledExecutorService exec = pick(); if (exec == REJECTING) { return Disposables.disposed(); } try { return Disposables.fromFuture(exec.schedule(RxJavaPlugins.onSchedule(run), delay, unit)); } catch (RejectedExecutionException ex) { return Disposables.disposed(); } }
@Override public Disposable schedulePeriodicallyDirect(Runnable run, long initialDelay, long period, TimeUnit unit) { ScheduledExecutorService exec = pick(); if (exec == REJECTING) { return Disposables.disposed(); } try { return Disposables.fromFuture(exec.scheduleAtFixedRate(RxJavaPlugins.onSchedule(run), initialDelay, period, unit)); } catch (RejectedExecutionException ex) { return Disposables.disposed(); } }
@Override public Disposable scheduleDirect(Runnable run) { ScheduledExecutorService exec = pick(); if (exec == REJECTING) { return Disposables.disposed(); } try { return Disposables.fromFuture(exec.submit(RxJavaPlugins.onSchedule(run))); } catch (RejectedExecutionException ex) { return Disposables.disposed(); } }
@Override public Disposable scheduleDirect(Runnable run) { ScheduledExecutorService exec = pick(); if (exec == REJECTING) { return Disposables.disposed(); } try { return Disposables.fromFuture(exec.submit(RxJavaPlugins.onSchedule(run))); } catch (RejectedExecutionException ex) { return Disposables.disposed(); } }
@Override public Disposable schedulePeriodicallyDirect(Runnable run, long initialDelay, long period, TimeUnit unit) { ScheduledExecutorService exec = pick(); if (exec == REJECTING) { return Disposables.disposed(); } try { return Disposables.fromFuture(exec.scheduleAtFixedRate(RxJavaPlugins.onSchedule(run), initialDelay, period, unit)); } catch (RejectedExecutionException ex) { return Disposables.disposed(); } }
@Override public Disposable scheduleDirect(Runnable run, long delay, TimeUnit unit) { ScheduledExecutorService exec = pick(); if (exec == REJECTING) { return Disposables.disposed(); } try { return Disposables.fromFuture(exec.schedule(RxJavaPlugins.onSchedule(run), delay, unit)); } catch (RejectedExecutionException ex) { return Disposables.disposed(); } }
@Override public Disposable schedule(Runnable action, long delayTime, TimeUnit unit) { CompositeDisposable sub = new CompositeDisposable(); Future<?> future = SwtExec.async().schedule(() -> { if (!sub.isDisposed()) { action.run(); sub.dispose(); } }, delayTime, unit); sub.add(Disposables.fromFuture(future)); return sub; }