我正在尝试对使用delay()
的Kotlin coroutine进行单元测试。对于单元测试,我不关心delay()
,它只是放慢测试的速度。我希望以某种方式运行测试,在调用delay()
时不会实际延迟。
class TestUiContext : CoroutineDispatcher(), Delay {
suspend override fun delay(time: Long, unit: TimeUnit) {
// I'd like it to call this
}
override fun scheduleResumeAfterDelay(time: Long, unit: TimeUnit, continuation: CancellableContinuation<Unit>) {
// but instead it calls this
}
override fun dispatch(context: CoroutineContext, block: Runnable) {
CommonPool.dispatch(context, block)
}
}
如果您不希望有任何延迟,为什么不简单地恢复日程呼叫中的继续?:
class TestUiContext : CoroutineDispatcher(), Delay {
override fun scheduleResumeAfterDelay(time: Long, unit: TimeUnit, continuation: CancellableContinuation<Unit>) {
continuation.resume(Unit)
}
override fun dispatch(context: CoroutineContext, block: Runnable) {
//CommonPool.dispatch(context, block) // dispatch on CommonPool
block.run() // dispatch on calling thread
}
}
这样delay()
就不会延迟地恢复。请注意,这仍然会延迟挂起,因此其他协程仍然可以运行(如yield()
)
@Test
fun `test with delay`() {
runBlocking(TestUiContext()) {
launch { println("launched") }
println("start")
delay(5000)
println("stop")
}
}
不延迟运行并打印:
start
launched
stop
编辑:
您可以通过自定义dispatch
函数来控制继续运行的位置。
问题内容: 假设我有一个任务要从java.util.concurrent.BlockingQueue中提取元素并进行处理。 如果可以动态更改频率,我该如何安排/重新安排任务? 想法是获取数据更新流并将其批量传播到GUI 用户应该能够更改更新频率 问题答案: 我认为您无法更改固定速率的延迟。我认为您需要使用schedule()执行一次操作,并在完成后再次计划(如果需要,可以更改超时)。
我正在制作一个待办事项列表应用程序,并有3种自定义单元格类型。对于任务单元格,它只是左侧的图像视图和右侧的文本视图。我希望单元格在文本视图文本对于单行来说太大时自动调整大小。 我已经添加了正确的约束,并将其添加到viewWillAppear中 但是,当进入带有tableview的视图时,单元格会在一秒钟内保持较小,然后扩展到正确的大小。此外,在最初添加任务时,单元格不会调整大小,除非返回并再次打开
我正在尝试它,在尝试单元测试我的ViewModel时遇到了一个问题。我想要实现的目标:测试我的在我的ViewModel中以正确的顺序接收所有状态值。 我代码如下: ViewModel: 编辑:作为一个临时解决方案,我将它作为一个实时数据进行测试:
问题内容: 我需要在循环中对数据库进行SQL查询: 更好的方法是:保持原样或循环后移动: 或者是其他东西 ? 问题答案: 整个要点是直到函数返回才执行,因此将其放置在要关闭的资源打开后的适当位置。但是,由于要在循环内创建资源,因此根本不要使用defer- 否则,在函数退出之前,您不会关闭在循环内创建的任何资源,因此它们会堆积直到然后。相反,您应该在每次循环迭代结束时关闭它们, 而无需 :
本文向大家介绍js延迟加载的方式有哪些?相关面试题,主要包含被问及js延迟加载的方式有哪些?时的应答技巧和注意事项,需要的朋友参考一下 defer 属性 async 属性 动态创建DOM方式 使用jQuery的getScript方法 使用setTimeout延迟方法 让JS最后加载
我有一个简单的模式,如下所示 为了找到CEP检测时间的延迟,添加了在如上所示的模式中选择每个事件的时间。每个事件类都有一个参数Edtl(事件检测时间本地),该参数最初设置为0,然后再设置为系统。nanoTime() 我在执行时遇到以下错误,但问题是该错误是在程序运行一段时间后出现的 我想我设置这个模式是因为我在模式中同时进行读取和写入操作。如果是这样,那么我应该如何在Flink CEP中找到平均复