Louis CAD A (fixed) basic approach ;-)
suspend fun awaitTrigger1() { coroutineScope {
val win = coroutineContext::cancelChildren
launch { awaitAutomaticTrigger(); win(null) }
launch { awaitManualTrigger(); win(null) }
} }
version with some result
suspend fun awaitTrigger2(): T = coroutineScope {
val deferred = CompletableDeferred<T>()
launch { deferred.complete(awaitAutomaticTrigger()) }
launch { deferred.complete(awaitManualTrigger()) }
deferred.await().also { coroutineContext.cancelChildren() }
}