Проблема
- У меня есть NSOperationQueue с именем
logEntryGeneratorQueue
- Я хочу дождаться завершения всех операций в очереди
Если я использую:
[logEntryGeneratorQueue waitUntilAllOperationsAreFinished];
, то это нормально работает, если поток, добавляющий в очередь, находится в самом фоне.
Однако, если я запускаю этот код черезмодульный тест, он будет работать в основном потоке.Поэтому я пришел к этому «решению», которое мне действительно не нравится:
if ([NSThread isMainThread]) {
while ([[logEntryGeneratorQueue operations] count] > 0) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
}
} else {
[logEntryGeneratorQueue waitUntilAllOperationsAreFinished];
}
Это всегда было далеко не идеально, но всегда работало нормально на 10.5.Однако теперь я обновил свой проект до использования 10.6 SDK, и это ломается.
На одном тесте он фактически завершает тест до его завершения.Я понятия не имею, почему - я предполагаю, что это как-то связано с тем, как NSOperationQueues работает по-разному в 10.6 - теперь они используют GCD.
То, что я пробовал
Я пытался заменить runUntilDate на sleep, что, как я и думал, означает, что каждый тест останавливается навсегда, когда он попадает сюда.
Мой вопрос
Есть ли лучшийспособ ждать завершения NSOperationQueue в основном потоке?Если нет, как я могу заставить этот код работать под 10.6?