Dispatch Group Serial Queue

时间:2018-02-18 10:01:59

标签: ios queue grand-central-dispatch

我试图了解为后台线程任务创建Serial Dispatch Group的正确方法。例如:

我有一个视频,我想分成5个部分。所以理论上这将是队列周期:

  • 在后台主题
  • 上运行AVAssetExportSession
  • 等待它完成
  • 通知已完成
  • 在后台主题
  • 上运行AVAssetExportSession
  • 依此类推

我一直在挖掘有关此问题的教程,但我找不到合适的方法来实现这一目标。

任何帮助都会被高度评价!

最诚挚的问候,Roi

2 个答案:

答案 0 :(得分:2)

如果要并行和串行处理任务并且最后一项任务不清楚,则通过组进行同步非常有用。但你的问题完全是串行的。

为什么不将串行队列用于您的目的?您可以将五个块添加到该队列,它们将按所需顺序执行。您也可以通过在后台运行的单个块来解决您的问题。

答案 1 :(得分:2)

没有"串行调度组"。串行/并发是队列的属性,而不是组的属性。

鉴于AVAssetExportSession本身就是一个异步过程,将它添加到串行队列的简单尝试将无法工作。两种方法似乎合乎逻辑你可以:

  1. 您可以将exportAsynchronously(completionHandler:)包装在异步自定义Operation子类中。然后,您可以将这五个操作添加到串行操作队列中。如果需要,您可以为它们提供单独的完成块。和/或然后您可以根据这五个操作进行完成操作。

  2. 您可以编写一个执行请求i的递归函数,并且在其完成处理程序中,您可以让它为i + 1调用自身。它只需要检查是否i < 5(或其他)。