我用
dispatch_async(getDataQueue,^{
//do many work task A
dispatch_aysnc (mainQueue, ^{
//do
};
}
)
如果我按返回键,而 gcd 没有完成它的任务 A,我想打破 dispatch_async.how to do
我用
dispatch_async(getDataQueue,^{
//do many work task A
dispatch_aysnc (mainQueue, ^{
//do
};
}
)
如果我按返回键,而 gcd 没有完成它的任务 A,我想打破 dispatch_async.how to do
你可以使用一个标志来继续工作,它是假的:
// 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 的一个基本事实是,一旦你调度了一个块,只要队列没有挂起,它就会无论如何运行。如果您需要可取消的异步操作,则需要使用NSOperation