gpt4 book ai didi

ios - 并发 NSOperationQueue 上传后跟一个任务

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:40:37 25 4
gpt4 key购买 nike

我正在尝试执行一个两步过程:

  1. 同时上传照片
  2. 用户输入然后发布内容

,这与“添加照片”时 facebook 应用程序的工作方式非常相似

我想使用默认的 NSOperationQueueDefaultMaxConcurrentOperationCount 首先在后台开始上传照片。这些操作将返回一些我需要与第二篇帖子一起发送的信息。

但是,由于应用程序的性质和并发性,只有在满足以下条件时,我才能按照发布内容的方式构建它:

  1. 所有照片已上传
  2. 发布他的内容的用户操作

可能会发生几种情况:

  1. 没有要发布的照片​​,用户发布内容,内容应立即发布
  2. 图片上传完成,用户发布内容,内容应立即发布
  3. 照片上传完成,用户发布内容,需要等待所有照片上传完成后才能发布内容。

我想我应该创建一个照片上传 NSOperationQueue 并检查 operationCount。如果它 == 0,则当用户点击 UIButton 时应立即发布内容。

但是,如果照片上传没有完成,我该如何等待呢?我是否应该在伪代码中按以下方式使用 waitUntilAllOperationsAreFinished:

// User taps on UIButton to post his content and this is in a ViewController
- void postMyContent:
{
[self.photoUploadQ.waitUntilAllOperationsAreFinished]

// Post my content now
}

这是正确的吗?我无法将第二个任务添加到 photoUploadQ,因为它具有默认并发性。

由于文档原因,我担心死锁/阻塞:

When called, this method blocks the current thread and waits for the receiver’s current and queued operations to finish executing. While the current thread is blocked, the receiver continues to launch already queued operations and monitor those that are executing. During this time, the current thread cannot add operations to the queue, but other threads may. Once all of the pending operations are finished, this method returns.

If there are no operations in the queue, this method returns immediately.

谢谢!

最佳答案

一个常见的操作队列模式是创建一个操作(在您的例子中是“发布内容”操作),它依赖于一系列其他操作(在您的例子中是“图像上传”操作)的完成,使用NSOperation 方法,addDependency .这样,尽管队列可能是并发的,但在其他“图片上传”操作完成之前,此“发布内容”操作不会开始。

您可能还想将您的操作队列限制为小于 NSOperationQueueDefaultMaxConcurrentOperationCount,因为 NSURLConnection 通常只允许 5 个左右的并发操作(如果您做的更多) ,其中一些最终可能会超时)。

关于ios - 并发 NSOperationQueue 上传后跟一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18733247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com