0

は私はOP-1のように3回としてシリアル化されたタスク(のためのgetSomethingsWithResultWithCompletionメソッドを実行したいOP2に依存例えば完了continuation-順次作り方シリアル化された非同期タスク

でいくつかの操作タスクを実行したいです。 ... depen OP 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); 

}]; 

}]; 

}]; 

問題

場合は別のスレッドで実行します(AFNetworkingでリクエストを送信するなど)。私はserializeに問題があり、別のタスクが開始されます。私は、それはですので順次開始するタスクのすべてのように同じスレッドで実行しているNSOperationQueueNSOperationが、それらの実装と、このような何かを実装している問題

を持って、まだNSOperationQueueとセマフォにしようとしたが持って

が正常に動作します。 operationQueueExample

+0

「リトリーブ」メソッドを「取得」に変更することはできますか? – gnasher729

答えて

-1

魔法の杖を振ることはできません。 getSomethingsWithResultWithCompletionがあなたのメソッドでない場合、その完了ハンドラがどのスレッドで実行されているかは分かりません。最も簡単な方法は、最初のメソッドの補完ハンドラで2番目のメソッドを呼び出すことです。

1

私はそのアプローチを強く推奨していませんが、バックグラウンドスレッドでタスクを送信すると、GCDセマフォを使用できます。

dispatch_semaphore_t sema = dispatch_semaphore_create(0); 

[MFRequestManager retrivesomeDataWithCompletion:^(id _Nullable response) { 
    if(Completion) 
    Completion(response) 
    dispatch_semaphore_signal(sema); 
}]; 
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); 
+0

はいバックグラウンドスレッドでタスクを実行しますが、 'retrivesomeDataWithCompletion'では別のスレッドで別のタスクを呼び出すため、この問題が発生します!あなたはgithubのリンクを確認してください? – Mohamad

+0

私は 'NSOperationQueue'でもそれらを実装できますか? – Mohamad

+0

あなたの答えは私を助けるが、私はまだ混乱している!もし私が完了(更新の質問)を入れ子にしたら、どうすれば実装するのですか? – Mohamad