【发布时间】:2020-08-18 20:08:02
【问题描述】:
假设我有三个远程调用来构建我的页面。其中一个 (X) 对页面至关重要,另外两个 (A, B) 仅用于增强体验。
因为criticalFutureX 太重要了,不受futureA 和futureB 的影响,所以我希望所有远程调用的总延迟不超过X。
这意味着,如果criticalFutureX 完成,我想丢弃futureA 和futureB。
val criticalFutureX = ...
val futureA = ...
val futureB = ...
// the overall latency of this for-comprehension depends on the longest among X, A and B
for {
x <- criticalFutureX
a <- futureA
b <- futureB
} ...
在上面的例子中,尽管它们是并行执行的,但总体延迟取决于 X、A 和 B 中最长的,这不是我想要的。
Latencies:
X: |----------|
A: |---------------|
B: |---|
O: |---------------| (overall latency)
有firstCompletedOf,但它不能用来明确地说“在criticalFutureX完成的情况下”。
有没有类似下面的东西?
val criticalFutureX = ...
val futureA = ...
val futureB = ...
for {
x <- criticalFutureX
a <- futureA // discard when criticalFutureX finished
b <- futureB // discard when criticalFutureX finished
} ...
X: |----------|
A: |-----------... discarded
B: |---|
O: |----------| (overall latency)
【问题讨论】:
-
这能回答你的问题吗? How to cancel Future in Scala?
标签: scala asynchronous future