0

我需要推迟一个任务的执行,直到我完成一个高优先级的任务,例如重新认证,然后从那里执行原始任务。我正在尝试为此使用 Swift Concurrency 的Task对象:

Task {
    await service.fetch(...)
}

我看到我可以cancel完成任务,但我想稍后停止/启动它。我正在考虑将其存储在队列中,并在高优先级任务完成后将队列刷新。这可以用 Swift Concurrency 来完成,还是我希望我不必用 async/await 或类似的东西来包装Operation对象?

4

1 回答 1

0

来自 WWDC 2021 视频“Swift 并发:幕后”,任务安排代码在未来执行,但不能让您对该任务的执行时间进行太多控制。特别是,即使您可以为任务提供优先级,但在某些情况下,您可能仍然会在任务执行的顺序中出现优先级倒置。

对于您似乎想要的控制类型,您最好的选择是使用 Grand Central Dispatch 并将高优先级和低优先级队列送入串行调度队列,然后您可以将任务放入适当的队列中。

编辑:我刚刚看到一个对我来说很新的构造(自从我每天使用 GCD 以来已经有一段时间了)。它被称为 Workloop ( https://developer.apple.com/documentation/dispatch/workloop ),听起来它可能只是一张票,无需手动将调度队列捆绑在一起。

于 2021-10-14T16:57:36.210 回答