Основной аспект вопроса: Это о iOS. Могу ли я каким-то образом отсылать блоки кода таким образом, чтобы они все (а) выполнялись в фоновом режиме и (б) в том же потоке? Я хочу запустить некоторые трудоемкие операции в фоновом режиме, но их нужно запускать в одном потоке, потому что они связаны с ресурсами, которые не должны быть разделены между потоками.
Дальнейшие технические подробности, если требуется: Это о внедрении плагина sqlite для Apache Cordova, рамки для приложений HTML5 на мобильных платформах. Этот плагин должен быть реализацией WebSQL в средствах API плагинов 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];
}];
}
Но, насколько я знаю, нет гарантии, что отправленные кодовые блоки (см. runInBackground
) будут запускаться в одном потоке.