【问题标题】:Dispatch Group Serial Queue调度组串行队列
【发布时间】:2018-02-18 10:01:59
【问题描述】:

我正在尝试了解为后台线程任务创建串行调度组的正确方法。示例:

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

  • 在后台线程上运行AVAssetExportSession
  • 等待它完成
  • 通知完成
  • 在后台线程上运行 AVAssetExportSession
  • 等等等等

我一直在研究有关此问题的教程,但找不到合适的方法来实现这一点。

任何帮助都将受到高度评价!

最好的问候,罗伊

【问题讨论】:

    标签: ios queue grand-central-dispatch


    【解决方案1】:

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

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

    【讨论】:

    • 嘿克莱门斯,谢谢你的回复!我使用了 Rob 递归解决方案(至少对我来说更容易实现)。不错的方法。谢谢!
    【解决方案2】:

    没有“串行调度组”这样的东西。串行/并发是队列的属性,而不是组的属性。

    鉴于AVAssetExportSession 本身是一个异步进程,将其添加到串行队列的简单尝试将不起作用。两种方法似乎合乎逻辑。您可以:

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

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

    【讨论】:

    • 嘿,罗伯!谢谢你的回复。我使用了递归选项。只需几行代码即可按预期工作。谢谢罗伯! :)
    • 刚看到我忘了接受答案。抱歉,Rob 耽搁了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2017-10-26
    • 1970-01-01
    • 2018-12-06
    相关资源
    最近更新 更多