Когда я отменяю операцию NSOperation (когда пользователь нажимает кнопку), метод отмены вызывается из основного потока, но, очевидно, операция выполняется в другом потоке.
Поэтому, чтобы избежать условий гонки, когда я изменяю _isExecuting и _isFinished, я думаю, что отмена (или, по крайней мере, ее логика) должна вызываться из того же потока, что и операция NSOperation. Кроме того, когда пользователь отменяет его, несколько файлов удаляются, и это занимает время. Поскольку отмена вызывается из основного потока, все приложение на некоторое время перестает отвечать, что ужасно.
Как выполнить код отмены в том же потоке, что и текущая операция NSO?
Я попытался это отменить (аналогично тому, что я видел в ASIHTTPRequest):
if (_operationThread) {
[self performSelector:@selector(cancelOnRequestThread) onThread:_operationThread withObject:nil waitUntilDone:NO];
} else {
[self cancelOnRequestThread];
}
И _operationThread устанавливается в методе start с использованием:
_operationThread = [NSThread currentThread];
Но это не работает.
Любая идея или предложение?
Примечание: я использую параллельные операции, поэтому я использую start вместо main.
Большое спасибо за помощь.
Рикардо.