mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-06-02 07:55:13 +00:00
32 lines
747 B
Kotlin
32 lines
747 B
Kotlin
package dev.inmo.micro_utils.coroutines
|
|
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.channels.Channel
|
|
import kotlinx.coroutines.launch
|
|
|
|
fun <T> CoroutineScope.actor(
|
|
channelCapacity: Int = Channel.UNLIMITED,
|
|
block: suspend (T) -> Unit
|
|
): Channel<T> {
|
|
val channel = Channel<T>(channelCapacity)
|
|
launch {
|
|
for (data in channel) {
|
|
block(data)
|
|
}
|
|
}
|
|
return channel
|
|
}
|
|
|
|
inline fun <T> CoroutineScope.safeActor(
|
|
channelCapacity: Int = Channel.UNLIMITED,
|
|
noinline onException: ExceptionHandler<Unit> = defaultSafelyExceptionHandler,
|
|
crossinline block: suspend (T) -> Unit
|
|
): Channel<T> = actor(
|
|
channelCapacity
|
|
) {
|
|
safely(onException) {
|
|
block(it)
|
|
}
|
|
}
|
|
|