#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