私が使う
dispatch_async(getDataQueue,^{
//do many work task A
dispatch_aysnc (mainQueue, ^{
//do
};
}
)
戻るキーを押して、gcd がタスク A を完了していない場合、dispatch_async を中断したい。
私が使う
dispatch_async(getDataQueue,^{
//do many work task A
dispatch_aysnc (mainQueue, ^{
//do
};
}
)
戻るキーを押して、gcd がタスク A を完了していない場合、dispatch_async を中断したい。
フラグを使用して、false の場合は常に機能し続けることができます。
// Somewhere accessible from the task's block and from the view controller
__block BOOL quit = NO;
dispatch_async(getDataQueue,^{
dispatch_aysnc (mainQueue, ^{
if (!quit)
{
// do first thing
}
if (!quit)
{
// do second thing
}
while (!quit)
{
// do lots of things
}
});
});
そして、次のようにしてバックグラウンド タスクを停止できます。
quit = YES;
これは、タスクが強制終了する前にクリーンアップを実行できるため、バックグラウンド タスクを停止するための推奨される方法です。
これはできません。GCD に関する基本的な真実の 1 つは、ブロックをディスパッチすると、キューが一時停止されていない限り、何があっても実行されるということです。キャンセル可能な非同期操作が必要な場合は、使用する必要がありますNSOperation