Найдите время между моно выполняемым вызовом подписки и фактически выполняемым выполняемым

#rxjs #reactive-programming #project-reactor #reactor

Вопрос:

У меня есть моно, созданное из запускаемого. Я использую ExecutorService с фиксированным размером потока для создания экземпляра планировщика. Я создаю несколько моно, используя приведенный ниже код, и подписываюсь на них.

 Mono.fromRunnable(new Runnable() { //Some business logic }).subscribeOn(scheduler)  

Эти подписки могут происходить параллельно из-за вызовов из нескольких вызовов, и мы используем общий сервис executor для всех этих вызовов, может возникнуть задержка между тем, когда он подписан, и когда «Некоторый блок бизнес-логики», упомянутый ниже, фактически выполняется из-за ограниченного размера потока, установленного для службы ExecutorService. Есть ли способ найти этот временной промежуток между тем, когда он подписан, и когда он фактически получил поток для выполнения?

Ответ №1:

Насколько я знаю, встроенного способа нет, поэтому лучшее, что вы, вероятно, сделаете, это используете doOnSubscribe() (на Mono объекте) для сохранения одной метки времени, а затем создадите другую метку времени в качестве первой строки run() метода в этом Runnable .

Затем эти временные метки можно сравнить, чтобы определить, какая задержка присутствует, если таковая имеется.

Комментарии:

1. Эй, Майкл, я пробовал это, но и doOnSubscribe (), и runnable выполняются одним и тем же потоком после его назначения. Таким образом, это не дает деталей задержки, которых я ожидал.

2.попробуйте использовать doFirst вместо doOnSubscribe , который срабатывает в Subscriber#onSubscribe методе (который уже слишком запоздал в жизненном цикле по сравнению с влиянием .subscribeOn(Scheduler) ). изменить: также убедитесь, что doFirst это после subscribeOn