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() } } https://pl.kotl.in/i1YWEs2lC https://pl.kotl.in/oQyBHb2bg