几个DownloadTasks顺序

Pat*_*rer 4 ios nsurlsessiondownloadtask

我有n个任务发送到服务器.当我启动它们时[taskN resume]它们将并行启动但我想按顺序启动它们 - 如果第一个任务完成,其他任务将启动.有什么建议?

Pat*_*rer 5

我带来了非常简单的解决方案,没有子类化:

样品:

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue setMaxConcurrentOperationCount:1];

    // first download task
    [queue addOperationWithBlock:^{
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); // create a semaphore


        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionTask *task1 = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {


            dispatch_semaphore_signal(semaphore); // go to another task
        }];
        [task1 resume];
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); // wait to finish downloading

    }];
    // second download task
    [queue addOperationWithBlock:^{
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);


        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionTask *task2 = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {


            dispatch_semaphore_signal(semaphore);
        }];
        [task2 resume];
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    }];
Run Code Online (Sandbox Code Playgroud)

这两个操作(task1,task2)将按顺序执行,因此它们将一直等到n-1操作完成.

使用受NSBlockOperation和队列驱动的NSURLSession中的信号量