use of io.reactivex.disposables.CompositeDisposable in project RxJava by ReactiveX.
the class CompletableMergeDelayErrorIterable method subscribeActual.
@Override
public void subscribeActual(final CompletableObserver s) {
final CompositeDisposable set = new CompositeDisposable();
s.onSubscribe(set);
Iterator<? extends CompletableSource> iterator;
try {
iterator = ObjectHelper.requireNonNull(sources.iterator(), "The source iterator returned is null");
} catch (Throwable e) {
Exceptions.throwIfFatal(e);
s.onError(e);
return;
}
final AtomicInteger wip = new AtomicInteger(1);
final AtomicThrowable error = new AtomicThrowable();
for (; ; ) {
if (set.isDisposed()) {
return;
}
boolean b;
try {
b = iterator.hasNext();
} catch (Throwable e) {
Exceptions.throwIfFatal(e);
error.addThrowable(e);
break;
}
if (!b) {
break;
}
if (set.isDisposed()) {
return;
}
CompletableSource c;
try {
c = ObjectHelper.requireNonNull(iterator.next(), "The iterator returned a null CompletableSource");
} catch (Throwable e) {
Exceptions.throwIfFatal(e);
error.addThrowable(e);
break;
}
if (set.isDisposed()) {
return;
}
wip.getAndIncrement();
c.subscribe(new MergeInnerCompletableObserver(s, set, error, wip));
}
if (wip.decrementAndGet() == 0) {
Throwable ex = error.terminate();
if (ex == null) {
s.onComplete();
} else {
s.onError(ex);
}
}
}
use of io.reactivex.disposables.CompositeDisposable in project RxJava by ReactiveX.
the class ScheduledRunnableTest method setFutureCancelRace.
@Test
public void setFutureCancelRace() {
for (int i = 0; i < 500; i++) {
CompositeDisposable set = new CompositeDisposable();
final ScheduledRunnable run = new ScheduledRunnable(Functions.EMPTY_RUNNABLE, set);
set.add(run);
final FutureTask<Object> ft = new FutureTask<Object>(Functions.EMPTY_RUNNABLE, 0);
Runnable r1 = new Runnable() {
@Override
public void run() {
run.setFuture(ft);
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
run.dispose();
}
};
TestHelper.race(r1, r2);
assertEquals(0, set.size());
}
}
use of io.reactivex.disposables.CompositeDisposable in project RxJava by ReactiveX.
the class ScheduledRunnableTest method dispose.
@Test
public void dispose() {
CompositeDisposable set = new CompositeDisposable();
ScheduledRunnable run = new ScheduledRunnable(Functions.EMPTY_RUNNABLE, set);
set.add(run);
assertFalse(run.isDisposed());
set.dispose();
assertTrue(run.isDisposed());
}
use of io.reactivex.disposables.CompositeDisposable in project RxJava by ReactiveX.
the class ScheduledRunnableTest method runDispose.
@Test
public void runDispose() {
for (int i = 0; i < 500; i++) {
CompositeDisposable set = new CompositeDisposable();
final ScheduledRunnable run = new ScheduledRunnable(Functions.EMPTY_RUNNABLE, set);
set.add(run);
Runnable r1 = new Runnable() {
@Override
public void run() {
run.call();
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
run.dispose();
}
};
TestHelper.race(r1, r2);
assertEquals(0, set.size());
}
}
use of io.reactivex.disposables.CompositeDisposable in project RxJava by ReactiveX.
the class TrampolineSchedulerTest method testNestedTrampolineWithUnsubscribe.
@Test
public void testNestedTrampolineWithUnsubscribe() {
final ArrayList<String> workDone = new ArrayList<String>();
final CompositeDisposable workers = new CompositeDisposable();
Worker worker = Schedulers.trampoline().createWorker();
try {
workers.add(worker);
worker.schedule(new Runnable() {
@Override
public void run() {
workers.add(doWorkOnNewTrampoline("A", workDone));
}
});
final Worker worker2 = Schedulers.trampoline().createWorker();
workers.add(worker2);
worker2.schedule(new Runnable() {
@Override
public void run() {
workers.add(doWorkOnNewTrampoline("B", workDone));
// we unsubscribe worker2 ... it should not affect work scheduled on a separate Trampline.Worker
worker2.dispose();
}
});
assertEquals(6, workDone.size());
assertEquals(Arrays.asList("A.1", "A.B.1", "A.B.2", "B.1", "B.B.1", "B.B.2"), workDone);
} finally {
workers.dispose();
}
}
Aggregations