协程执行问题某些协程不会启动

时间:2019-06-02 14:09:34

标签: kotlin coroutine kotlin-coroutines

我正在尝试使用spring和kotlin将某些数据转换并刷新到流式应用程序中的数据库中。由于性能方面的限制,我不得不使用协程和块来更快地执行转换和持久化过程。 问题是输入数据的大小不等于持久数据!

我的作业计划以固定的延迟运行:

@Scheduled(fixedDelay = 10_000)
fun flushToDb() {
    // some operations
    CoroutineScope(getDispatcherExec()).launch {
        flush(oldStat, isFlushing)
    }
}

这是我的悬浮函数:

private suspend fun flush(oldStat: Map<String, AppDailyStatsModel>, isFlushing: AtomicBoolean) {
    logger.info("RedisFlush ${oldStat.size} starts")
    val start = System.currentTimeMillis()
    val count = AtomicLong(0)
    val startCount = AtomicLong(0)
    val newStat = AtomicLong(0)
    val updateStat = AtomicLong(0)
    val input = oldStat.values
    coroutineScope {

        input
                .chunked(1000)
                .forEach { models ->
                    launch {
                        try {
            startCount.addAndGet(models.size.toLong())
                            // Transform

            // Persist
                            count.addAndGet(models.size.toLong())
                            logger.info("Flushed  ${count.get()}")
                        } catch (e: Exception) {
                            logger.error("PROBLEM IN SAVE ", e)
                        }
                    }
                }
    }
}

问题是countstartCount相等,并且小于input

任何帮助将不胜感激!

0 个答案:

没有答案