Search in sources :

Example 46 with CompositeDisposable

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);
        }
    }
}
Also used : AtomicThrowable(io.reactivex.internal.util.AtomicThrowable) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AtomicThrowable(io.reactivex.internal.util.AtomicThrowable) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) MergeInnerCompletableObserver(io.reactivex.internal.operators.completable.CompletableMergeDelayErrorArray.MergeInnerCompletableObserver)

Example 47 with CompositeDisposable

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());
    }
}
Also used : FutureTask(java.util.concurrent.FutureTask) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) Test(org.junit.Test)

Example 48 with CompositeDisposable

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());
}
Also used : CompositeDisposable(io.reactivex.disposables.CompositeDisposable) Test(org.junit.Test)

Example 49 with CompositeDisposable

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());
    }
}
Also used : CompositeDisposable(io.reactivex.disposables.CompositeDisposable) Test(org.junit.Test)

Example 50 with CompositeDisposable

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();
    }
}
Also used : ArrayList(java.util.ArrayList) Worker(io.reactivex.Scheduler.Worker) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) Test(org.junit.Test)

Aggregations

CompositeDisposable (io.reactivex.disposables.CompositeDisposable)78 Nullable (android.support.annotation.Nullable)15 Test (org.junit.Test)11 Bundle (android.os.Bundle)10 View (android.view.View)10 Consumer (io.reactivex.functions.Consumer)10 TimeUnit (java.util.concurrent.TimeUnit)10 Flowable (io.reactivex.Flowable)9 NonNull (android.support.annotation.NonNull)8 TextUtils (android.text.TextUtils)7 ViewGroup (android.view.ViewGroup)7 AndroidSchedulers (io.reactivex.android.schedulers.AndroidSchedulers)7 TextView (android.widget.TextView)6 BindView (butterknife.BindView)6 ArrayList (java.util.ArrayList)6 List (java.util.List)6 Intent (android.content.Intent)5 LayoutInflater (android.view.LayoutInflater)5 Task (bolts.Task)5 TaskCompletionSource (bolts.TaskCompletionSource)5