1.這是AFN3.0里邊的一段代碼.利用的是技術信號的形式,等待異步執行的結果,並將結果返回.
- (NSArray *)tasksForKeyPath:(NSString *)keyPath
{
__block NSArray *tasks = nil;
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) {
tasks = dataTasks;
} else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) {
tasks = uploadTasks;
} else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) {
tasks = downloadTasks;
} else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) {
tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"];
}
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore);
return tasks;
}
2.Dispatch Queue沒有"取消"這一概念,一旦將處理追加到Dispatch Queue中,就沒有辦法可將該處理去除,也沒有辦法可在執行中取消該處理.但是可以使用NSOperationQueue中的取消.
