如何在GCD中杀死/暂停/关闭异步块? [英] How do I kill/suspend/close an asyncronous block in GCD?

查看:321
本文介绍了如何在GCD中杀死/暂停/关闭异步块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了一个使用GCD异步调度的块,如下所示:

I've implemented a block that is dispatched asynchronously using GCD as follows:

__block BOOL retValue;
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    retValue = [self GCDHandler:actionName WithServiceType:serviceType :arguments];
});

return retValue;

如果运行的时间超过我想要的时间,如何取消这样的阻止?有没有办法取消GCD调度的块,或者为它们提供超时?

How do I cancel such a block if it is running for longer than I would like? Is there a way to cancel GCD-dispatched blocks, or provide a timeout to them?

推荐答案

没有内置的方法取消GCD块。他们相当沉寂和忘记。我过去做过这种方法的一种方法是为块提供'令牌'。

There is no built in way to cancel GCD blocks. They're rather set and forget. One way I've done this in the past is to provide 'tokens' for blocks.

- (NSString*)dispatchCancelable:(dispatch_block_t)block
{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        if (!checkIfCanceled)
            block();
    }
    return blah; //Create a UUID or something
}

- (void)cancelBlock:(NSString*)token
{
   //Flag something to mark as canceled
}

这篇关于如何在GCD中杀死/暂停/关闭异步块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆