Scala Thread.sleep 奇怪的行为

问题描述 投票:0回答:1

我正在执行 API 调用,每 30 秒我就会尝试获取响应。我用过

Await.result(Future{ Thread.sleep(millisecondstoSleep)}, Duration.Inf)

但是当我得到响应后,它不会执行连续的步骤并退出循环。 下面是代码片段。

for (i <- 0 to 20 if !shouldBreak) {
    
    Await.result(Future{ blocking { Thread.sleep(n*1000);n }}, Duration.Inf)
    // check api status...(**Once I receive the result here next few lines does not get execute.**)
    if (apIstatus == "sucess")
    {
    var status = success
    // Insert INTO Table..
    }
    
}

我正在尝试设置一个字符串 var status = success 并将该值插入到增量表中。无法弄清楚可能是什么原因。我是不是错过了什么。预先感谢

scala databricks future delta-lake
1个回答
0
投票

如果没有更好地理解调用此函数的上下文,很难判断,但是查看代码,我怀疑您可能期望字符串

"success"
(两个
c
),但正在检查
"sucess"
(一个)
c
)。除非这是问题中的拼写错误,否则您可能需要使用一些调试语句或调试器来验证这一点。

进一步说明:您正在运行

Thread.sleep
,它会阻塞要执行代码的线程(这取决于
ExecutionContext
使用的隐式
Future
)。您还在其周围使用
Await.result
,这会阻止最初运行的线程。这可能会阻塞两个线程只是为了执行等待。您可能需要考虑“仅”阻塞调用线程,或者为等待而构建的一些设施,例如
java.util.Timer
java.util.concurrent.ScheduledExecutorService

© www.soinside.com 2019 - 2024. All rights reserved.