我正在调度许多与此类似的操作:
for (int x = 0; x < 1000; x++)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul),
^{
//Do stuff
});
一旦它们全部执行完毕,我想调用另一个方法[self someMethod];
或分派另一个最后一个块,那无关紧要。
我怎样才能做到这一点?
您可以使用调度组或调度屏障。两者都有据可查。
但是,这种并发-大量分派到异步队列-可以保证很慢,很耗资源,并且很可能导致您的应用程序被抛弃以用于内存使用。
如果没有可用的线程来启动处理,则异步调度必须产生一个线程。根据定义,无法以任何方式限制对全局并发队列的异步调度,因为这样做会在Block A依赖于Block B时非常迅速地导致随机死锁,但是在Block A完成之前,阻止了Block B的执行(例如)。
并发应该始终被限制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句