我正在尝试在 ZIO 中使用 TrampolineExecutionContext 来测试同一线程上的后台流订阅(这样我就可以按照我期望的顺序运行效果)。
testM("Using trampoline execution context") {
(for {
queue <- Queue.unbounded[String]
_ <- ZStream
.fromQueue(queue)
.take(1)
.foreach(el => ZIO.effect(println(s"In Stream $el")))
.fork
_ <- queue.offer("Element")
_ <- ZIO.effect(println("Inside for comprehension")).on(trampolineExecutionContext)
} yield {
assert(1)(equalTo(1))
}).on(trampolineExecutionContext)
}
在这种情况下,我得到了我所期望的:
《在流元素中》、《深入理解》
如果我删除on(trampolineExecutionContext)
,我将仅因为我没有加入光纤(创建同步点)而获得“内部理解”。
如何为整个测试将默认上下文设置为 trampolineExecutionContext 而无需在每次调用或重要调用中都重复它?