【发布时间】:2021-12-01 21:01:20
【问题描述】:
在 Vapor 的请求上下文中创建计时器是否有任何问题?我需要在用户启动流程几分钟后触发一个动作。到目前为止,当我调用执行此操作的例程时,我确认设置计时器的代码已运行。但是计时器和对主 DispatchQueue 的调用都不会触发。 调用设置的方法会立即将用户重定向到另一个端点,我想知道这是否是原因。
func startTournament(req: Request) -> EventLoopFuture<Response> {
let uId : UUID = req.auth.get(User.self)!.id!
var tourn : Tournament?
return User.query(on: req.db)
.with(\.$tournament) { $0.with(\.$invitations)}
.filter(\.$id == uId)
.first().flatMap { u in
tourn = u!.tournament!
Tournament.addTournamentTimer(tourn!)
是调用设置的代码。
这是调用的方法,执行打印语句:
static func addTournamentTimer(_ tourn : Tournament) {
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
print("Timer fired!")
}
let timer = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false) { timer in
print("Timer fired!")
}
print("adding timer for tournament \(tourn.name)")
}
我不想使用 DispatchQueue 方法,但我尝试包含它以查看它是否有效。似乎没有。我对使用计时器还很陌生,但是我有相当多的功能可以在客户端应用程序中使用计时器,所以我很能够在其他地方找到它们。同样,我假设这对我来说是关于异步的不清楚的 请求,或者当重定向发生时计时器被转储?
【问题讨论】: