src/main/java/io/reactivex/Single.java
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public static <T, U> Single<T> using(Callable<U> resourceSupplier,
                                         Function<? super U, ? extends SingleSource<? extends T>> singleFunction,
                                         Consumer<? super U> disposer) {
        return using(resourceSupplier, singleFunction, disposer, true);
    }
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public static <T, U> Single<T> using(Callable<U> resourceSupplier,
                                         Function<? super U, ? extends SingleSource<? extends T>> singleFunction,
                                         Consumer<? super U> disposer) {
        return using(resourceSupplier, singleFunction, disposer, true);
    }
Allows using and disposing a resource while running a SingleSource instance generated from
that resource (similar to a try-with-resources).
<dl>
<dt><b>Scheduler:</b></dt>
<dd>{@code using} does not operate by default on a particular {@link Scheduler}.</dd>
</dl>
@param <T> the value type of the SingleSource generated
@param <U> the resource type
@param resourceSupplier the Callable called for each SingleObserver to generate a resource Object
@param singleFunction the function called with the returned resource
Object from {@code resourceSupplier} and should return a SingleSource instance
to be run by the operator
@param disposer the consumer of the generated resource that is called exactly once for
that particular resource when the generated SingleSource terminates
(successfully or with an error) or gets disposed.
@return the new Single instance
@since 2.0