170 похожих чатов

Привет, CompletableFuture с orTimeout, как понять какая именно CompletableFuture отвалилась? Может

есть какой-то контекст выполнения?

12 ответов

6 просмотров

у supplyAsync есть второй параметр, туда можно подложить executor. можно заврапить настоящий executor в котором предполагается запускать операции и делегировать запуск тасков из враппера в ностоящий executor при этом логируя, какой таск запускается

Iglï-Bluetōthsün Автор вопроса

От прикольно, а TimeoutException будет выкидываться тут delegate.execute(task);?

Iglï Bluetōthsün
От прикольно, а TimeoutException будет выкидыватьс...

Не могу ответит, не знаю. Я даже не уверен что то что я предлагаю правильно. Это просто гепотеза

Dima
ты предлагаешь правильно

Тут специфика задачи.

Я с этим не работал, но разве CompletableFuture не умеет эксепшены наружу выбрасывать (exceptionally(), handle()). Передать id таски в мессадже эксепшена не получится?

Iglï-Bluetōthsün Автор вопроса
Александр Евтеев
Я с этим не работал, но разве CompletableFuture не...

Вот именно с этим и проблема, нету никакого контекста, либо у меня руки кривые(что тоже вариант) Но пока решения не нашел

Iglï Bluetōthsün
Вот именно с этим и проблема, нету никакого контек...

Расскажи подробнее про «нет контекста»: ведь если ты хочешь знать, какая задача завалилась - значит, задачи чем-то отличаются? Хотя бы входными параметрами. Их и логировать. Или ты о другом контексте?

Iglï-Bluetōthsün Автор вопроса

Грубый пример После вызова нескольких CompletableFuture for( i .. 10) { val suplier = Suplier { print(I) } CompletableFuture.supplyAsync(supplier, executor).orTimeout(TIMEOUT, TimeUnit.SECONDS) } Как понять какой из них свалился по таймауту?

Iglï Bluetōthsün
Грубый пример После вызова нескольких CompletableF...

Примерно так получается на твоем примере: https://gist.github.com/evteev777/8a7ec6ad7efcdd13cc40866dd62206e7 Вывод с рандомными таймаутами: result=0 result=1 ERROR: java.lang.RuntimeException: i=2, cause: java.util.concurrent.TimeoutException ERROR: java.lang.RuntimeException: i=3, cause: java.lang.IllegalArgumentException: Exception message: i=3 result=4 итд Просто из CompletableFuture может вернуться или result, или exception. Но в случае с TimeoutException эксепшен не пробрасывается из задачи, а кидается позже, в самой CompletableFuture. Поэтому остается логировать только входные параметры, а не контекст в процессе выполнения задачи Это в первом приближении, наверняка можно красивее сделать )

Iglï-Bluetōthsün Автор вопроса
Александр Евтеев
Примерно так получается на твоем примере: https://...

“Но в случае с TimeoutException эксепшен не пробрасывается из задачи” да именно это и проблема Ваше решение как раз и дает контекст потому что finalI виден и всех методов вызывающихся с CompletableFuture Моя проблема была в вызове цепочки настройки CompletableFuture без доступа к глобальной переменной, решил тасканием объекта контекста рядом с future, не идеально но работает

Iglï Bluetōthsün
“Но в случае с TimeoutException эксепшен не пробра...

Почему неидеально? А как по другому, если не таскать везде объект контекста, который больше ниоткуда недоступен?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта