@@ -11,30 +11,46 @@ import kotlin.time.toDuration
1111
1212fun CoroutineScope.launchWithTicker (
1313 ticksCount : Int ,
14- durationUnit : DurationUnit ,
14+ tickDurationMillis : Long ,
1515 onTick : suspend (Int ) -> Unit ,
1616 onEnd : (suspend () -> Unit )? = null,
1717 initialDelayMillis : Long = 0,
1818): ReceiveChannel <Unit > {
1919 val tickerChannel = ticker(
20- ticksCount.toDuration(durationUnit).toLongMilliseconds() ,
20+ tickDurationMillis ,
2121 initialDelayMillis
2222 )
2323 launch {
2424 var currentTick = 0
2525 for (event in tickerChannel) {
26- if (currentTick >= ticksCount) {
26+ onTick(currentTick)
27+ if (currentTick == ticksCount) {
2728 onEnd?.invoke()
2829 tickerChannel.cancel()
2930 break
3031 }
31- onTick(currentTick)
3232 currentTick++
3333 }
3434 }
3535 return tickerChannel
3636}
3737
38+ fun CoroutineScope.launchWithTicker (
39+ ticksCount : Int ,
40+ tickDuration : Duration ,
41+ onTick : suspend (Int ) -> Unit ,
42+ onEnd : (suspend () -> Unit )? = null,
43+ initialDelay : Duration = Duration .ZERO ,
44+ ): ReceiveChannel <Unit > {
45+ return launchWithTicker(
46+ ticksCount = ticksCount,
47+ tickDurationMillis = tickDuration.toLongMilliseconds(),
48+ onTick = onTick,
49+ onEnd = onEnd,
50+ initialDelayMillis = initialDelay.toLongMilliseconds()
51+ )
52+ }
53+
3854fun CoroutineScope.launchDelayed (delayMillis : Long , action : suspend () -> Unit ) {
3955 launch {
4056 delay(delayMillis)
0 commit comments