GCD阻止异步队列继续进行

时间:2012-11-20 18:00:27

标签: ios multithreading grand-central-dispatch afnetworking

我正在使用来自真棒AFNetworkingAFHTTPRequestOperation下载文件。

我正在下载大型zip文件,下载完成后需要解压缩。但是由于AFHTTPRequestOperation的完成块发生在主线程上,并且这些是相对较大的文件,我需要在后台线程上解压缩,这是我用GCD实现的。

但是在后台线程中解压缩可能会出错,如果是这样的话,我需要能够阻止线程继续...有没有办法用GCD来做或者我必须把所有东西放在if陈述的巨大主体?

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *theOperation, id responseObject){

    NSLog(@"*** TP DOWNLOADER: Finished downloading");

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        //Unzip the file:
        ZipArchive *za = [[ZipArchive alloc] init];

        BOOL unzipOpenFileSuccessful = [za UnzipOpenFile:operation.targetPath Password:@"thepassword"];
        if(!unzipOpenFileSuccessful){

            NSLog(@"Problems unzipping!");

            //should return here and not keep doing work!
        }

        //keep doing work... 

    });
];

1 个答案:

答案 0 :(得分:0)

如果发生错误,您可以“返回”。