Что я хочу
У меня в приложении есть NSOperationQueue, и очень важно, чтобы все операции были обработаны до его закрытия. У меня есть следующий код при выходе, чтобы убедиться, что NSOperationQueue пуст перед выходом:
if ([NSThread isMainThread]) {
while ([[operationQueue operations] count] > 0) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
}
} else {
[operationQueue waitUntilAllOperationsAreFinished];
}
Я сталкивался с проблемой с моим кодом до того, как NSOperation "завис" перед завершением, и он заблокировал всю очередь. Очевидно, что в подобных ситуациях мой код должен выдавать исключение, что он и делает сейчас.
Но я все еще хочу защититься от всего странного, когда операции останавливаются и блокируют очередь, в результате чего приложение никогда не завершает работу и ошибка не обнаруживается.
Мое решение для мусора
Я рассматриваю вопрос об установлении таймаута в очередь для завершения своих операций. Затем, когда истечет время ожидания, я могу выдать исключение, и проблема может быть обнаружена.
Однако, это не правильно. В идеале, я не хочу полагаться на таймеры, чтобы убедиться, что работа сделана.
Мой вопрос
Есть ли лучший, надежный, способ убедиться, что мои операции не заморожены?