Class Blocking


  • @Uncommitted
    @Private
    public class Blocking
    extends Object
    Contains various utility methods related to blocking operations. Note that this class has been moved over from "java-client" into "core-io" in the 1.3.0 timeframe. On earlier versions, it's counterpart can be found in the "java-client" library which depends on "core-io".
    Since:
    1.3.0
    Author:
    Michael Nitschinger
    • Constructor Detail

      • Blocking

        public Blocking()
    • Method Detail

      • blockForSingle

        public static <T> T blockForSingle​(rx.Observable<? extends T> observable,
                                           long timeout,
                                           TimeUnit tu)
        Blocks on an Observable and returns a single event or throws an Exception. Note that when this method is used, only the first item emitted will be returned. The caller needs to make sure that the source Observable only ever returns a single item (or none). The BlockingObservable code applies different operators like single, last, first and more, these need to be applied manually. This code is based on BlockingObservable.blockForSingle(rx.Observable<? extends T>), but does not wait forever. Instead, it utilizes the internal CountDownLatch to optimize the timeout case, with less GC and CPU overhead than chaining in an Observable.timeout(long, TimeUnit) operator. If an error happens inside the Observable, it will be raised as an Exception. If the timeout kicks in, a TimeoutException nested in a RuntimeException is thrown to be fully compatible with the Observable.timeout(long, TimeUnit) behavior.
        Type Parameters:
        T - the type returned.
        Parameters:
        observable - the source Observable
        timeout - the maximum timeout before an exception is thrown.
        tu - the timeout unit.
        Returns:
        the extracted value from the Observable or throws in an error case.