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

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

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

12 ответов

5 просмотров

у 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 эксепшен не пробра...

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

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
8
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Карта сайта