withLock

suspend fun <T> withLock(key: K, onWaitingToUnlock: () -> Unit = {}, action: suspend () -> T): T