Сколько времени ушло на запуск Observable с использованием RxJava (ReactiveX)?

Я использую java ReactiveX (RxJava) в scala Play Framework 2.5 для асинхронной связи с кушеткой. Я хотел бы знать, сколько времени потребовалось для запуска моего наблюдаемого? Я определяю свою наблюдаемую, используя приведенный ниже код.

def get(id: String) : Observable[Profile] = {
  this.bucket
    .async()
    // can I have a start time here possibly using map?
    .get(id)
    .map[Profile](toProfile)
    // can I have an end time here possibly using map?
}

Я называю это, используя следующее

Thread.sleep(1000)

val observable = get("myID")

Thread.sleep(1000)

// measure start time here
println("observable: " + observable.toBlocking.first())
// measure end time here

Thread.sleep(1000)

Как я могу измерить, сколько времени потребовалось для запуска наблюдаемой?

заранее спасибо

Фрэнсис


person Francis    schedule 27.04.2016    source источник


Ответы (1)


Вы захотите запустить свой таймер в блоке doOnSubscribe(), а затем завершить его в блоке onTerminated().

Примером может быть что-то вроде:

long start;
observable()
    .doOnSubscribe(() -> start = System.nanoTime())
    .doOnTerminate(() -> System.out.println(System.nanoTime() - start));

В качестве альтернативы вы можете последовать тому, что делает Netflix с RxNetty, и вернуть время начала как часть объекта, проходящего через цепочку, и использовать его в конце.

person tddmonkey    schedule 27.04.2016