取消在线程中工作的GCD块

时间:2011-05-22 20:00:38

标签: iphone objective-c grand-central-dispatch

我有以下块在后台执行请求 如何在请求完成之前取消该请求?

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
        NSData *thumbnailData = [NSURLConnection sendSynchronousRequest:request];
        ...
    });

3 个答案:

答案 0 :(得分:9)

发送后你无法取消......

您可以使用解决方法,例如:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
__block BOOL isCanceled = NO;
dispatch_async(queue, ^{

    if (isCanceled)
        return;

    NSData *thumbnailData = [NSURLConnection sendSynchronousRequest:request];
    ...
});

答案 1 :(得分:5)

在将操作添加到队列后,您可以使用更高级别的“NSOperationQueue”,然后您可以取消所有操作。

答案 2 :(得分:4)

你做不到。您必须使用NSURLConnection的异步接口才能取消请求。