如何进行序列化异步任务

时间:2016-10-31 11:33:01

标签: ios objective-c multithreading concurrency nsoperationqueue

我想运行一些操作任务,完成 继续 -

例如,我希望执行getSomethingsWithResultWithCompletion方法3次作为序列化任务(如op1依赖op2,...依赖操作N):

[MFLayer getSomethingsWithResultWithCompletion:^(id  _Nullable response)Completion {

 // it will be run on another thread!** 
[MFRequestManager retrivesomeDataWithCompletion:^(id  _Nullable response1) {

 // it will be run on another thread!** 
  [MFRequestManager retriveAnothersomeDataWithInfo:response1 WithCompletion:^(id  _Nullable response2) {

      NSLog(@"Finished with Result : %@",response2);

 }];

 }];

}];

问题

如果retrive methods在另一个线程中执行(比如使用AFNetworking发送请求),我遇到序列化问题,另一个任务将启动。

我尝试使用NSOperationQueue和Semaphore但仍有问题

我已经使用NSOperationQueueNSOperation实现了类似的功能,但是它们的实现在同一个线程上运行,因此所有任务都按顺序启动,以便它可以正常工作。 operationQueueExample

2 个答案:

答案 0 :(得分:1)

我强烈反对这种方法,但如果你在后台线程上发送任务,你可以使用GCD信号量。

if {@finalvalues}=1
then true
else false

答案 1 :(得分:-1)

你不能挥动魔杖。如果getSomethingsWithResultWithCompletion不是您的方法,则无法说明其完成处理程序在哪个线程上运行。最简单的方法是在第一个方法的完成处理程序中调用第二个方法。