| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- * Copyright 2019-2021 Mamoe Technologies and contributors.
- *
- * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
- * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
- *
- * https://github.com/mamoe/mirai/blob/master/LICENSE
- */
- @file:JvmMultifileClass
- @file:JvmName("MiraiUtils")
- package net.mamoe.mirai.utils
- import kotlinx.coroutines.*
- import kotlinx.coroutines.sync.Semaphore
- import kotlinx.coroutines.sync.withPermit
- import kotlin.coroutines.CoroutineContext
- import kotlin.coroutines.EmptyCoroutineContext
- @Suppress("unused", "INVISIBLE_MEMBER", "INVISIBLE_REFERENCE", "DeprecatedCallableAddReplaceWith")
- @Deprecated(
- message = "Use runBIO which delegates to `runInterruptible`. " +
- "Technically remove suspend call in `block` and remove CoroutineScope parameter usages.",
- level = DeprecationLevel.WARNING
- )
- @kotlin.internal.LowPriorityInOverloadResolution
- public suspend inline fun <R> runBIO(
- noinline block: suspend CoroutineScope.() -> R
- ): R = withContext(Dispatchers.IO, block)
- public suspend inline fun <R> runBIO(
- noinline block: () -> R
- ): R = runInterruptible(context = Dispatchers.IO, block = block)
- public inline fun CoroutineScope.launchWithPermit(
- semaphore: Semaphore,
- coroutineContext: CoroutineContext = EmptyCoroutineContext,
- crossinline block: suspend () -> Unit
- ): Job {
- return launch(coroutineContext) {
- semaphore.withPermit { block() }
- }
- }
- /**
- * Creates a child scope of the receiver scope.
- */
- public fun CoroutineScope.childScope(
- coroutineContext: CoroutineContext = EmptyCoroutineContext,
- ): CoroutineScope {
- val ctx = this.coroutineContext + coroutineContext
- return CoroutineScope(ctx + SupervisorJob(ctx.job))
- }
- /**
- * Creates a child scope of the receiver context scope.
- */
- public fun CoroutineContext.childScope(
- coroutineContext: CoroutineContext = EmptyCoroutineContext,
- ): CoroutineScope {
- val ctx = this + coroutineContext
- return CoroutineScope(ctx + SupervisorJob(ctx.job))
- }
|