There are a few operators like `merge` and `take` where we choose to eagerly call `unsubscribe` otherwise it can end up waiting until the very final terminal state in `SafeSubscriber` which can be inefficient or cause memory leaks in extreme cases. In short, if the purpose of an operator is to end a subscription then it should invoke `unsubscribe` directly, and that's exactly what `take` and `takeWhile` are for.

See here in `take`: https://github.com/Netflix/RxJava/blob/master/rxjava-core/src/main/java/rx/operators/OperatorTake.java#L84