我想要的是
我的应用程序中有一个 NSOperationQueue,在应用程序退出之前处理所有操作至关重要。我在退出时有以下代码,以确保 NSOperationQueue 在退出前为空:
if ([NSThread isMainThread]) {
while ([[operationQueue operations] count] > 0) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
}
} else {
[operationQueue waitUntilAllOperationsAreFinished];
}
在 NSOperation 在完成之前“冻结”并且阻塞了整个队列之前,我的代码遇到了问题。显然,在这种情况下,我的代码应该抛出一个异常,它现在就是这样。
但是我仍然想防止在操作停止并阻塞队列时发生任何奇怪的事情,从而导致应用程序永远不会退出并且错误不会被捕获。
我的垃圾解决方案
我正在考虑在完成其操作的队列上设置一个超时。然后当它超时时,我可以抛出一个异常,然后问题就会被捕获。
然而,这感觉不对。理想情况下,我不想依赖计时器来确保工作完成。
我的问题
有没有更好的、故障安全的方法来确保我的操作没有冻结?