Предположим, у меня есть следующий код:Scala Future and TimeoutException: как узнать причину?
val futureInt1 = getIntAsync1();
val futureInt2 = getIntAsync2();
val futureSum = for {
int1 <- futureInt1
int2 <- futureInt2
} yield (int1 + int2)
val sum = Await.result(futureSum, 60 seconds)
Теперь предположим, что один из getIntAsync1
или getIntAsync2
занимает очень много времени, и это приводит к Await.result
бросать исключение:
Caused by: java.util.concurrent.TimeoutException: Futures timed out after [60 seconds]
Как я должен знать который один из getIntAsync1
или getIntAsync2
все еще находился на рассмотрении и фактически приводил к таймауту?
Обратите внимание, что здесь я сливаясь 2 фьючерсами с молнией, и это простой пример вопроса, но в моем приложении у меня есть такой код на другом уровне (т.е. getIntAsync1
сами могут использовать Future.zip
или Future.sequence
, карты/flatMap/applicationative)
Как-то я хотел бы иметь возможность регистрировать ожидающие параллельные операции stacktraces, когда тайм-аут возникает в моем основном потоке, чтобы я мог знать, где находятся узкие места в моей системе.
У меня есть существующий устаревший API-интерфейс, который еще не полностью реактивирован и не будет так скоро. Я пытаюсь увеличить время отклика, используя параллелизм. Но с тех пор, как я использую этот код, стало более болезненным понять, почему что-то занимает много времени в моем приложении. Я был бы признателен за любой совет, который вы можете предоставить, чтобы помочь мне отладить такие проблемы.
Что такое 'результат'? –
Я думаю, что это должно быть 'futureSum' –
В какие времена не было ни int1, ни int2, а новое будущее, созданное уроком – Lambder