【问题标题】:NSOperationQueue not limiting concurrent operationsNSOperationQueue 不限制并发操作
【发布时间】:2014-09-09 16:06:12
【问题描述】:
NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];
    myQueue.MaxConcurrentOperationCount = 1;

    [myQueue addOperationWithBlock: ^ {
        NSLog(@"started");
        [self aVeryLongOperation];
    }];

并发操作的数量限制为一个,但它们都开始了。假设添加了三个操作,控制台中的输出如下:

2014-09-09 17:51:02.705 Sample App [7356:7e03] started
2014-09-09 17:51:03.840 Sample App [7356:7e03] started
2014-09-09 17:51:04.495 Sample App [7356:7e03] started

我实际上如何将并发操作的数量限制在一个?

【问题讨论】:

  • 在调用aVeryLongOperation-NSLog(@"ended");之后添加一条日志语句。输出是什么?
  • 按照编写的代码,您似乎正在创建三个 NSOperationQueue。并发操作限制是每个队列。
  • 是的,我确实在创建三个 NSOperationQueue。所以我改变了这一点,将“myQueue”作为一个属性,但不幸的是控制台日志是一样的。

标签: ios objective-c nsoperation nsoperationqueue


【解决方案1】:

问题是在函数aVeryLongOperation 内部产生了一个后台线程,所有工作都在该线程上完成。因此,该函数在生成该线程后立即返回,并且下一个任务从队列中取出以执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多