Проблемы Queuing Concurrent & Non-Concurrent NSOperations

Мы делаем это с xUnit.net для наших автоматизированных сборок. Мы используем CruiseControl.net (и испытывают TeamCity). Задача MSBuild, которую мы выполняем для непрерывной интеграции автоматически, изменяет номер сборки для нас, таким образом, получающийся zip-файл сборки содержит правильно имеющий версию набор DLLs и EXEs.

Наш файл MSBuild содержит ссылку UsingTask для DLL, который делает замены регулярного выражения: (Вы можете использовать этот DLL, поскольку он охвачен МН MS лицензией также)

  

Затем, мы извлекаем номер сборки, который обеспечивается автоматически системой CI. Вы могли также заставить своего поставщика управления исходным кодом обеспечивать исходное число пересмотра, если Вы хотите, но мы нашли, что сборка # в системе CI была более полезной, потому что не только видят результаты интеграции номером сборки CI, который также предоставляет ссылку назад на changeset (s), которые были включены в сборку.

 

 
   $(BUILD_NUMBER)
 
 
   $(ccnetlabel)
 
 
   0
 

(Мы пробуем BUILD_NUMBER, который является от TeamCity, тогда ccnetlabel, который является с CC.net, и если ни один не присутствует, мы принимаем значение по умолчанию к 0, так, чтобы мы могли протестировать автоматизированный сценарий сборки вручную.)

Затем, у нас есть задача, которая устанавливает номер сборки в файл GlobalAssemblyInfo.cs, который мы связываем во все наши проекты:

 
   
   
 

Эта находка атрибут AssemblyVersion и замены a.b.c.d номер версии с a.b.c. BuildNumber. Мы будем обычно уезжать, источник зарегистрировался в дереве с первыми тремя частями числа разработчика, зафиксированного, и четвертое в нуле (f.e., сегодня это 1.0.2.0).

В Вашем процессе сборки, удостоверьтесь, что задача SetVersionNumber предшествует Вашей задаче сборки. В конце мы используем нашу задачу Zip для на молнии результаты сборки так, чтобы у нас была история двоичных файлов для каждой автоматизированной сборки.

5
задан Michael Waterfall 29 October 2009 в 10:10
поделиться

3 ответа

Я обнаружил, в чем проблема!

Эти две бесценные статьи Дэйва Дрибина очень подробно описывают параллельные операции, а также проблемы, с которыми Snow Leopard & iPhone SDK вводят при асинхронном вызове вещей, требующих цикла выполнения.

http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/ http: // www .dribin.org / dave / blog / archives / 2009/09/13 / snowy_concurrent_operations /

Спасибо Крису Сатеру за то, что указал мне в правильном направлении!

Суть в том, чтобы убедиться, что Метод start , который мы вызвали в основном потоке:

- (void)start {

    if (![NSThread isMainThread]) { // Dave Dribin is a legend!
        [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
        return;
    }

    [self willChangeValueForKey:@"isExecuting"];
    _isExecuting = YES;
    [self didChangeValueForKey:@"isExecuting"];

    // Start asynchronous API

}
10
ответ дан 18 December 2019 в 10:46
поделиться

Я не заметил и не вижу никакого упоминания о addDependency: , которое может показаться предпосылкой для выполнения операций в правильном порядке.

Короче говоря, вторая операция зависит от первой.

0
ответ дан 18 December 2019 в 10:46
поделиться

Ваша проблема, скорее всего, связана с NSURLConnection. NSURLConnection зависит от цикла выполнения, работающего в определенном режиме (обычно это только режимы по умолчанию).

Существует ряд решений вашей проблемы:

  1. Убедитесь, что эта операция выполняется только в основном потоке. Если бы вы делали это в OS X, вы бы захотели проверить, что он делает то, что вы хотите, во всех режимах цикла выполнения (например, в модальном режиме и в режимах отслеживания событий), но я не знаю, в чем дело на iPhone.

  2. Создавайте и управляйте своей собственной веткой. Не лучшее решение.

  3. Вызовите - [NSURLConnection scheduleInRunLoop: forMode:] и передайте в основной поток или другой поток, о котором вы знаете. Если вы сделаете это, вы, вероятно, захотите вызвать - [NSURLConnection unscheduleInRunLoop: forMode:

6
ответ дан 18 December 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: