objective-c - 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
解决方案
推荐阅读
- oracle - 清除列定义
- liferay-7 - Liferay 西班牙语字符显示为垃圾字符
- c# - Blazor 请求被 PHP API 上的 CORS 策略阻止
- sentiment-analysis - 认知服务的情绪分析调用失败,返回“HttpOperationError”
- video - 如何在 linux 上将视频转换为 wmv3 格式
- android - 验证/签署对我的 API 的请求来自我的应用程序并且没有被欺骗(React Native)
- node.js - nexe :术语“nexe”未被识别为 cmdlet、函数、脚本文件或可操作的名称
- javascript - 如何将变量作为全局参数传递给 IIFE 函数?
- arrays - 根据对象数组中的属性过滤数组
- scala - 从spark scala中的txt或csv文件读取时从csv中删除标题