Параллельный beginBackgroundTaskWithName для push-уведомлений
Я хочу запустить и фоновое задание при получении push-уведомления. Пока у меня есть следующее:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSString* taskName = [NSString stringWithFormat:@"PushNotificationTask-%@", [[NSUUID UUID] UUIDString]];
NSLog(@"Starting bg-task for push notification %@", taskName);
self.pnBgTask = [application beginBackgroundTaskWithName:taskName expirationHandler:^{
NSLog(@"Expiring bg-task for push notification %@", taskName);
[application endBackgroundTask:self.pnBgTask];
self.pnBgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// do work here
NSLog(@"Ending bg-task for push notification %@", taskName);
[application endBackgroundTask:self.pnBgTask];
self.pnBgTask = UIBackgroundTaskInvalid;
});
В ситуации, когда push-уведомление поступает до завершения фоновой задачи предыдущей, этот код завершается ошибкой, поскольку одна задача перезаписывает другую.
Может кто-нибудь предложить хороший шаблон для решения этой проблемы?