Intereting Posts
Как сделать COUNT (*) с GROUP BY в Котлине? EvaluateJavaScript разрешает только возвращаемый тип String? Файл Kotlin в собственном проекте iOS с Kotlin / Native Конкатенация последовательности Котлина Требуется функция Котлина Нет, но определяется как другой тип Модуль библиотеки Android Kotlin экспортируется с плагином gradene maven-publish, не добавляющим зависимости Не удается открыть проект после обновления Android Studio Android Как установить множественные значения гравитации программно в Котлин? Кинжал 2 Именован не может быть предоставлен без метода @Provides Триггер с использованием Teamcity Kotlin DSL Kotlin падает на Android, когда выбранный вид элемента равен нулю Как перегружать конструкторы в котлин отличается в лямбда-обратном типе Методы Java ошибочно автоматически перегружаются в котлин Ошибка байта файла в kotlin. Как правильно передать? Расширения и фрагменты Android Kotlin

Отслеживание сбоев потоков

У меня есть HTML, который выводится (отображает результаты потоков) и отображается после завершения всех потоков (я жду завершения с использованием соединения)

Иногда отдельные потоки могут иметь исключения.

  • Если у меня нет каких-либо исключений в любых потоках, я хочу отобразить HTML в моем браузере.
  • Если у меня есть исключение во всех потоках, я хочу НЕ отображать HTML
  • Если у меня есть исключение в некоторых, но не во всех потоках, то я хочу показать HTML

Какой самый простой способ (наименьший объем кода) реализовать что-то, что может отслеживать, если поток потерпел неудачу или нет?

Solutions Collecting From Web of "Отслеживание сбоев потоков"

Вы можете использовать CompletableFuture для этой цели, например:

 val future1: CompletableFuture<String> = CompletableFuture.supplyAsync { println("This is your thread 1 code") "<html><head><title>" } val future2: CompletableFuture<String> = CompletableFuture.supplyAsync { println("This is your thread 2 code") if (Random().nextBoolean()) throw RuntimeException("Failed") "Title!</title></html></head>" } future1.thenCombine(future2, {result1, result2 -> result1 + result2}).whenComplete { s, throwable -> if (throwable != null) { println("failed") } else { println("done with $s") } } 

И в Kotlin 1.1 вы сможете написать этот код более читаемым способом:

 async { try { val s1 = await(future1) val s2 = await(future2) println(s1 + s2) } catch (e: Exception) { println("failed") } }