如何等待异步方法结束?
|
我有一个需要使用的工具箱(与远程服务接口)。该工具包查询远程服务并询问结果。它异步执行此操作,这在大多数情况下是好的,但不适用于创建简洁的方法。我想使方法类似于以下内容:
-(NSArray *)getAllAccounts {
NSString *query = @\"SELECT name FROM Account\";
//Sets \"result\" to the query response if no errors.
//queryResult:error:context: is called when the data is received
[myToolkit query:query target:self selector:@selector(queryResult:error:context:) context:nil];
//Wait?
return result.records;
}
问题是,在工具包中,方法使用@selector彼此调用,而不是直接调用,因此很难获得返回值。此外,实际查询使用:
NSURLConnection *connection = [[[NSURLConnection alloc] initWithRequest:aRequest delegate:self] autorelease];
这是异步的。到从服务接收数据时,很早以前我的方法就返回了……没有任何信息。所以我的问题是:有没有办法在数据返回之前暂停执行?我能否在主线程静止时使用第二个线程来获取数据(或使用3个线程使主线程不静止?)来完成此操作?
我不想编辑该工具箱以更改其方法(或添加一个新方法)以使其同步,所以有没有一种方法可以按需制作?
没有找到相关结果
已邀请:
2 个回复
号拳藐孔妇
然后在工具箱调用的方法中提供您要执行的结果:
您可能希望在类声明中封装\“ condition \”和\“ finished \”变量。 希望这可以帮助。 更新:这是一些将工作卸载到后台线程的代码:
当然,您可以保留队列以备后用,并将工作的实际排队移到方法调用中以使事情变得更整洁。
感秆暴壳