请求ASIHTTPRequest或AFNetworking时在队列中添加操作

6

我想在执行请求时添加操作。我了解过ASINetworkQueue,但它会添加所有操作并运行它们。但我想将操作添加到正在运行的队列中。

这种做法可行吗?我无所谓使用ASIHTTPRequest还是AFNetworking,只要能实现我的意图。

编辑

当我尝试添加另一个请求时,出现以下错误:

[ASINetworkQueue addOperation:]: operation is executing and cannot be enqueued'


我有些困惑。你的操作正在执行,而你想要添加到另一个队列中?一个队列可能正在执行其他操作,此时你可以添加任何操作。 - iDev
是的,我的操作(在队列中)正在执行,我想将另一个操作添加到队列中。 - HelmiB
1
你确定你要添加的当前操作没有在执行吗?如果它没有在执行,那么你应该能够添加到队列中。当一个操作正在执行,然后你尝试添加到某个队列时,通常会显示上述错误消息。 - iDev
1
不,它正在执行。这就是上面显示错误的原因。我正在寻找其他替代方案或解决方法。 - HelmiB
那么添加到队列后不能执行吗?因为NSOperationQueue不允许添加正在执行的操作。我恐怕在这方面你无能为力。 - iDev
显示剩余2条评论
2个回答

11

根据苹果文档提供的有关addOperation:的信息,很明显你不能将正在执行的操作添加到NSOperationQueue中。

以下是它所述的内容:

一个操作对象一次最多只能在一个操作队列中,并且如果该操作已经在另一个队列中,则此方法会抛出NSInvalidArgumentException异常。同样,如果该操作当前正在执行或已经完成执行,则此方法也会抛出NSInvalidArgumentException异常。

这是NSOperationQueue的默认行为。在将NSOperation添加到队列之前,您需要确保它没有在执行。可以使用各种属性,例如isExecutingisFinished等来进行检查。


9
即使您的操作不是isExecutingisFinished,如果您尝试在同一队列中两次排队相同的操作,则会抛出错误operation is executing and cannot be enqueued。在将操作再次排队到同一队列之前,您必须重新初始化该操作。 - kas-kad

0
你只需要在请求队列上调用addOperation。在asi中,对于它的ASiNetworkQueue来说,它是否正在运行都不重要。

嗯...我读到的资源说不一样。不能添加正在运行的操作。你确定吗?虽然我还没有尝试过,但明天会试一下。谢谢。 - HelmiB
好的,我还没有尝试过,但从代码和头文件文档来看,它似乎不会出现问题。 - Daij-Djan
当然,NSOperationQueue(ASI或AFN)始终是追加操作,但您可以使用依赖项进行操作。 - Daij-Djan
显然它不能。它显示:[ASINetworkQueue addOperation:]:操作正在执行,无法排队 - HelmiB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接