如何判断一个方法是否异步运行?
我有几个与核心数据相关的方法,它们有时通过异步调度队列 (GCD) 异步调用,而其他时候则同步调用。
// sometimes this happens
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[[DataServices sharedInstance] doSomeCoreDataStuff:^(BOOL result, NSString *message)
{
// do some post-stuff here
}];
});
// other times this happens
[[DataServices sharedInstance] doSomeCoreDataStuff:^(BOOL result, NSString *message)
{
// do some post-stuff here
}];
除此之外,我在NSManagedObjectContext
整个应用程序中都使用了单例。由于上下文不是线程安全的,在核心数据方法异步运行的情况下,我需要在这些方法中创建一个新的上下文,否则我想使用单例实例上下文。
想到的唯一方法是类似的[[NSThread mainThread] isMainThread]
,但 GCD 可能会或可能不会在主线程上工作,所以这不起作用。