Coroutine
-
Default buffer size of buffered channel is 64.
-
Await for completion of CompletableFuture without blocking thread use await()
Links
Use multiple resources
class Resources : AutoCloseable {
val resources = mutableListOf<AutoCloseable>()
fun <T: AutoCloseable> T.use(): T {
resources += this
return this
}
override fun close() {
var exception: Exception? = null
resources.reversed().forEach { resource ->
try {
resource.close()
} catch (closeException: Exception) {
if (exception == null) {
exception = closeException
} else {
exception.addSuppressed(closeException)
}
}
}
if (exception != null) throw exception
}
}
inline fun <T> withResources(block: Resources.() -> T): T = Resources().use(block)
withResources {
val connection = getConnection().use()
val statement = connection.createStatement().use()
val resultSet = statement.executeQuery(sql).use()
while (resultSet.next()) { ... }
}
reference: Is there standard way to use multiple resources?