iOS アプリケーションでシーケンシャル ジョブを実行したいと考えています。前のジョブが完了するまでジョブが実行されないようにしたい。まず、このようなことをしようとしました
group = dispatch_group_create();
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_async(group, queue, ^{
// Job 1
// ...
});
dispatch_group_async(group, queue, ^{
// Job 2
// ...
});
このように、ジョブ 1 がまだ実行されているときに、ジョブ 2 の実行が開始されることがあります。
次に、この方法を使用することを考えました:
group = dispatch_group_create();
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_notify(group, queue, ^{
// Job 1
// ...
});
dispatch_group_notify(group, queue, ^{
// Job 2
// ...
});
ジョブ 1 は非同期にディスパッチされていないため、動作は同じです。そのため、dispatch_group_notify()
関数は何も実行されていないと見なし、ジョブ 2 はジョブ 1 を待機せずにディスパッチされます。
別の解決策を見つけました:
group = dispatch_group_create();
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_notify(group, queue, ^{
dispatch_group_async(group, queue, ^{
// Job 1
// ...
});
});
dispatch_group_notify(group, queue, ^{
dispatch_group_async(group, queue, ^{
// Job 2
// ...
});
});
今、すべてが正常に動作します。
このディスパッチ インサイド ディスパッチ構造に何か問題はありますか? それとも大丈夫ですか?
ありがとうございました!