Swift并发任务可以存储在队列中并稍后启动吗?



我需要延迟任务的执行,直到完成高优先级任务(例如重新身份验证),然后从那里执行原始任务。我试图使用Swift并发的任务对象:

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

我看到我可以cancel任务,但我想稍后停止/启动它。我正在考虑将其存储在队列中,并在高优先级任务完成后冲洗队列。这可以用Swift并发,或者我希望我不需要包装一个操作对象与async/await或类似的东西?

选自WWDC 2021视频《Swift并发:幕后》任务安排代码在将来执行,但不给您很多控制任务何时执行的机会。特别是,尽管您可以为任务提供优先级,但在某些情况下,任务执行的顺序可能仍然存在优先级反转。

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

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

最新更新