Блок dispatch_async не вызывается

Класс MySynchManager имеет общий экземпляр.

Одна из функций класса MySynchManager

- (void)uploadSession:(NSString *)sessionId {
    // run the upload process on a separate thread to not to block the main thread for user interaction
    // process upload data in serial Queue
    NSLog(@"Inside uploadSession");
    if (!_serialQueue) {
        NSLog(@"uploadSession, _serialQueue is NOT ACTIVE");

        [self setRunLoopStarted:FALSE];
        _serialQueue = dispatch_queue_create("sessionUploadQueue", NULL);

        dispatch_async(_serialQueue, ^{
            [[MySyncManager sharedInstance] dispatchSession:sessionId];
        });
    }
    else {
        //[self setRunLoopStarted:FALSE];
        dispatch_async(_serialQueue, ^{
            [self dispatchSession:sessionId];
        });
        NSLog(@"Adding block to the dispatch queue is complete");
    }
}

uploadSession:@"session" вызывается из контроллеров представления.

Проблема, с которой я сталкиваюсь, заключается в том, что иногда код, присутствующий в dispatchSession, вызывается, но иногда блок не вызывается. Я наблюдаю за оператором печати журнала только после того, как блок напечатан.

Кто-нибудь из вас может объяснить причину этого?


person ganapathi raju    schedule 03.12.2012    source источник


Ответы (1)


Это странный код. Попробуйте это вместо

-(void)uploadSession:(NSString *)sessionId
 {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
       _serialQueue = dispatch_queue_create("sessionUploadQueue", NULL);
    });

    dispatch_async(_serialQueue, ^{
      [self dispatchSession:sessionId];
    });

 }
person Jack Freeman    schedule 22.02.2013