【发布时间】:2018-07-31 01:39:10
【问题描述】:
我有超过 5 个使用 Grand Central 调度异步工作的任务。我如何知道哪个任务将首先完成,哪个任务将最后完成?我的意思是说我怎么知道任务完成的顺序?如果我想同时停止任何任务或所有任务,我该如何存档?
【问题讨论】:
-
用相关代码更新您的问题(作为文本,没有图片)。清楚地解释您在使用代码时遇到的问题。
标签: swift multithreading
我有超过 5 个使用 Grand Central 调度异步工作的任务。我如何知道哪个任务将首先完成,哪个任务将最后完成?我的意思是说我怎么知道任务完成的顺序?如果我想同时停止任何任务或所有任务,我该如何存档?
【问题讨论】:
标签: swift multithreading
我如何知道哪个任务先完成,哪个任务最后完成?
你真的不能。异步任务在完成时完成,没有假定或保证的顺序。
我的意思是说我怎么知道任务完成的顺序?
如果一项任务是另一项任务的子任务,则子任务将首先完成,因为父任务可能取决于子任务的结果。否则,在一般意义上,确实没有明确的方法来确定哪个任务将首先完成。 GCD 将按其认为合适的方式分配时间表和资源。
如果你知道什么资源是可用的,聪明的程序员可以尝试设置队列,这样当一个任务完成时,资源可以被另一个类似的任务使用,所以没有等待,但那是远远超出了这个问题的范围。
如果我想同时停止任何任务或所有任务,我该如何存档?
我想你的意思是实现,而不是存档。
根据How to stop/cancel/suspend/resume tasks on GCD queue,您无法使用 GCD 停止正在运行的任务或任务组。如果你使用 NSOperationsQueue,你可以做一些可怕的事情,但技术上它不是 GCD 的一部分。
【讨论】: