APIリクエスト処理の不具合に対処していて、非同期処理について調べたのでメモしておきます。
iOSアプリをSwiftで実装している場合、いくつかの実装方法があり、お手軽に対処するためにGCD(Grand Central Dispatch)、DispatchGroup、DispatchSemaphoreを選択したのですが、以下のような【非同期処理の直列化】を行おうとした場合、処理途中で自由に処理をキャンセルできず(割り込めない)、結局、Foundation.Operation(NSOperation)で実装することとなりました。
キャンセル処理が出来ないことなんてあるのか?と思いますが、実際にキャンセル処理は処理完了時にしか出来ないようでした。
【非同期処理】
タスク1 --->
タスク2 --->
タスク3 --->
後処理 --->
【非同期処理の直列化】
タスク1 --->
タスク2 --->
タスク3 --->
後処理 --->
※ 後処理は全タスクの終了を待ち合わせてから処理する
参考にしたURLは以下の通り。
【参考URL】
Foundation.Operationの並列オペレーションがよくわからない人向けの説明
【Swift】非同期処理「Operation」について
swift で直列に非同期処理