派遣グループ
6339 ワード
iOS Concurrencyプログラミング、同期非同期処理、GCD/Open-Dispatchキューおよび操作キューについてでまとめた文章を読み終えた
何らかの理由でグループの完了通知に非同期で応答できない場合は、waitメソッドを派遣グループで使用できます.
すべてのタスクが完了する前に、現在のキューの同期方法をブロックします.
オプションの(optional)パラメータが必要です.タスクの完了を待つ時間を指定します(指定されていない場合は無期限).
例)昼食画面の状態で、ホームページがまだロードされていない場合は、しばらくしてからスキップします.
タスクを事前に定義して使用するオブジェクト.キューにコミットするために使用されます.
cancel()メソッドは存在しますタスクがまだ開始していません(キューに残っています)-タスクは 削除されました.タスクを実行する場合、isCanceledプロパティはtrue(実行を直接停止するタスクではない) に設定されます.
Notify(queue:実行するキュー、execute:Dispatch item)メソッドが存在します.
(直接実行し、実行するプロジェクト(タスク)を指定します.)
共有リソースにアクセスできるアクションの数を制限する必要があります.
派遣グループ
let group1 = DispatchGroup()
//큐를 보낼 때, 어떤 그룹에 넣을 것인지 정해주기
DispatchQueue.global(qos: ).async(group: group1){
}
//그룹이 모두 완료되었을 때 notify는 메인에서도 실행 가능
group1.notify(queue: DispatchQueue.main){ [weak self] in
self?.texsLabel.text = "모든 작업이 완료되었습니다."
}
同期待機
何らかの理由でグループの完了通知に非同期で応答できない場合は、waitメソッドを派遣グループで使用できます.
すべてのタスクが完了する前に、現在のキューの同期方法をブロックします.
オプションの(optional)パラメータが必要です.タスクの完了を待つ時間を指定します(指定されていない場合は無期限).
同期完了グループ操作の待機
待機時間の制限
例)昼食画面の状態で、ホームページがまだロードされていない場合は、しばらくしてからスキップします.
派遣グループの使用
queue.async(group: group1){
group1.enter() --> 입장 1
someAsyncMethod{
group1.leave() --> 퇴장 1
}
}
派遣プロジェクト
タスクを事前に定義して使用するオブジェクト.キューにコミットするために使用されます.
組み込みのキャンセル機能が悪い
cancel()メソッドは存在します
組み込みが悪い<順序機能>
Notify(queue:実行するキュー、execute:Dispatch item)メソッドが存在します.
(直接実行し、実行するプロジェクト(タスク)を指定します.)
Semaphoreについて
共有リソースにアクセスできるアクションの数を制限する必要があります.
let semaphore = DispatchSemaphore(value: 3)
queue.async(group: group1){
group1.enter() -> 입장 1
semaphore.wait() -> 일단 기다려 -1 = 2
someAsyncMethod{
group1.leave() -> 퇴장 1
semaphore.signal() -> 세마포어 숫자 +1 = 3
}
}
Reference
この問題について(派遣グループ), 我々は、より多くの情報をここで見つけました https://velog.io/@junstone1995/디스패치-그룹テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol