使用类似 promise/future 语法简化 OS X 和 iOS 的并发。这个库极大简化了在 objc 中进行异步任务所需的工作。这个库消除了在将多个基于块的异步任务链接在一起时产生的向右漂移问题。
需要注意的是,虽然它借鉴了承诺的语法,但不是设计为一个完全符合 A+ 的承诺库。我是在看到 mxcl 的 PromiseKit 库后受到启发创建这个库的。如果你想找一个符合承诺的库,可以在这里查看:这里。
通过示例是解释库功能的最佳方式。
DCTask *task = [DCTask new];
task.begin(^{ //syntax sugar for then
NSLog(@"let's begin a background thread");
sleep(10); //a example of a long running task
return @10; //something we got from the long running task
}).thenMain(^(NSNumber *num){
NSLog(@"first: %@",num); //this would be a 10
self.navigationItem.rightBarButtonItem.enabled = NO;
}).then(^{
//return the web tsk.
return [DCHTTPTask GET:@"http://www.vluxe.io"];
}).thenMain(^(DCHTTPResponse *response){
NSString *str = [[NSString alloc] initWithData:response.responseObject encoding:NSUTF8StringEncoding];
NSLog(@"web request finished: %@",str);
//do something on the main thread.
self.navigationItem.rightBarButtonItem.enabled = YES;
}).catch(^(NSError *error){
NSLog(@"got an error: %@",error);
self.navigationItem.rightBarButtonItem.enabled = NO;
});
[task start];
这使得在不同的线程之间切换变得更加简单,并消除了向右漂移。这个链可以根据需要无限进行。
不需要 return
。如果提供了返回类型,该库会自动处理。需要注意的是,它只支持返回对象,不支持返回标量类型(char,int,BOOL 等)。下一个处理程序的参数是从一个处理程序返回的对象。如果没有返回任何内容,传递给下一个处理程序的对象将为 nil。
返回 DCTask 或其子类的实例,可以将其添加到任务链中(如上面的示例所示)。
HTTPKit HTTPKit 是基于 ConcurrentKit 的 NSURLSession 包装器。
建议通过 CocoaPods 软件包管理器安装 ConcurrentKit。
pod 'ConcurrentKit'
ConcurrentKit 要求至少 iOS 5 或 OS X 10.8。
ConcurrentKit 采用 Apache 许可证。