取消在线程中工作的GCD块

Egi*_*gil 0 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];
        ...
    });
Run Code Online (Sandbox Code Playgroud)

ama*_*ttn 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];
    ...
});
Run Code Online (Sandbox Code Playgroud)


Par*_*ise 5

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