问题的主要方面:它是关于iOS的.我可以以某种方式调度代码块,他们将(a)在后台运行和(b)在同一个线程上运行吗?我想在后台运行一些耗时的操作,但这些操作必须在同一个线程上运行,因为它们涉及资源,不能在线程之间共享.
进一步的技术细节,如果需要:它是关于实现Apache Cordova的sqlite插件,Apache Cordova是移动平台上HTML5应用程序的框架.这个插件应该是Cordova的插件API 的WebSQL实现.(这意味着,不可能将整个事务包装在单个块中,这可以使一切变得更容易.)
以下是Cordova文档中的一些代码:
- (void)myPluginMethod:(CDVInvokedUrlCommand*)command
{
// Check command.arguments here.
[self.commandDelegate runInBackground:^{
NSString* payload = nil;
// Some blocking logic...
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:payload];
// The sendPluginResult method is thread-safe.
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}];
}
Run Code Online (Sandbox Code Playgroud)
但据我所知,无法保证那些调度的代码块(请参阅runInBackground)将在同一个线程上运行.
sqlite asynchronous thread-safety grand-central-dispatch ios