首页 > 解决方案 > Objective C 多线程并发

问题描述

我正在努力解决这个信号量锁定问题。

包含getRecipeList一个 URLSession 数据任务,它的完成处理程序只是调用我的

dispatch_semaphore_t semaphore =  dispatch_semaphore_create(0);

[BFRecipeDataTransport getRecipeList:^(NSArray * _Nonnull result) {
    NSMutableArray * serverItemsList = [NSMutableArray new];
    for(NSDictionary * item in result)
    {
        if(![self recipeExsists:[item objectForKey:@"id"]])
        {
            [serverItemsList addObject:[item objectForKey:@"id"]];
        }
    }
    
    dispatch_async(dispatch_get_main_queue(), ^{
        
        BFLOG(@"MAKING List");
        compleationHandler([NSArray arrayWithArray:serverItemsList]);
        dispatch_semaphore_signal(semaphore);
    });
    
}];
dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 6000));
BFLOG(@"List Done");

但输出总是

List Done
MAKING List

标签: objective-cmultithreading

解决方案


推荐阅读