NSOperation (사용자가 버튼을 누를 때)을 취소하면 cancel 메소드가 주 스레드에서 호출되지만 분명히 작업이 다른 스레드에서 실행 중입니다. 그래서 _isExecuting 및 _isFinished를 변경할 때 경쟁 조건을 피하기 위해 취소 (또는 최소한 논리)는 NSOperation과 동일한 스레드에서 호출해야한다고 생각합니다. 그 외에도 사용자가 파일을 취소하면 여러 파일이 삭제되고 시간이 오래 걸립니다. cancel은 주 스레드에서 호출되기 때문에 잠시 동안 모든 앱이 응답하지 않아 추한 것입니다.작업과 동일한 스레드에서 NSOperation을 취소하려면 어떻게해야합니까?
어떻게 현재 NSOperation과 동일한 스레드에서 취소 코드를 실행할 수 있습니까?
나는 (내가 ASIHTTPRequest에서 본 것과 비슷한) 다음에 취소 시도 :
if (_operationThread) {
[self performSelector:@selector(cancelOnRequestThread) onThread:_operationThread withObject:nil waitUntilDone:NO];
} else {
[self cancelOnRequestThread];
}
을 그리고 _operationThread 사용 시작 방법에 잘 살고있다 : _operationThread = [NSThread currentThread]
하지만 작동하지 않습니다.
의견이나 제안이 있으십니까?
참고 : 동시 작업을 사용하므로 main 대신 start를 사용합니다.
도움을 주셔서 감사합니다. 리카르도.