Flux.repeat
и Mono.repeat
будут повторно подписываться на источник, поэтому каждый предыдущий шаг источника будет повторяться с новой подпиской.
Поскольку calculateNextResult
и compareResults
являются синхронными операциями в вашем примере, вы можете использовать простой цикл for
для повторения ...
public Flux<Boolean> run(some params, Flux<Integer> prevResults){
return prevResults.map(elem -> {
for (int i = 0; i < 5; i++) {
if (compareResults(elem, calculateNextResult(some params))) {
return true;
}
}
return false;
});
}
Если бы calculateNextResult
или compareResults
были реактивными методами, возвращающими Mono
, то вы могли бы использовать flatMap
вместо map
и использовать один из методов Mono.repeat*
.
Например, что-то вроде этого:
private Mono<Integer> calculateNextResult(some params) {
// some implementation
}
private Mono<Boolean> compareResults(int prevRes, int nextRes) {
// some implementation
}
public Flux<Boolean> run(some params, Flux<Integer> prevResults){
return prevResults.flatMap(prevResult ->
calculateNextResult(some params)
.flatMap(nextResult -> compareResults(prevResult, nextResult))
.filter(comparisonResult -> comparisonResult)
.repeatWhenEmpty(Repeat.times(5))
.defaultIfEmpty(false));
}
В этом примере repeatWhenEmpty
вызовет новую подписку на Mono, созданную в flatMap, что приведет к пересчитать (при условии, что Mono, возвращенный из calculateNextResult
, настроен для расчета значения для каждой подписки).
Ответ на этот вопрос является действительно одним из предпочтения. Технически, что-либо может быть проинструктировано для открытия как автозапуск. Файл autorun.inf является просто файлом инструкции, который знает Windows, как читать для определения то, что он должен сделать, когда CD вставляется. Это могло быть приложением (записанный на любом языке, который Вы выбираете), презентация PowerPoint, открывая ссылку на сайт, и т.д. Пока Вы следуете правилам файла autorun.inf:
Существуют многие маленькие автоматически-выполнены-utils (некоторые освобождают), которые настраиваются. Я пошел бы для одного из тех.
Вам нужны две вещи:
Следуйте это ступает (http://support.microsoft.com/kb/324733 ИЛИ http://support.microsoft.com/kb/888469)
Когда Ваше приложение готово (с bootstrapper), необходимо будет создать файл autorun.inf на корневом пути CD. Поисковый 'autorun.inf создает' на Вашей любимой Поисковой системе.
Это - возможная функция связывания Mono использования:
"Получающийся исполняемый файл сам содержавший и не нуждается в Моно времени выполнения, установленном на выполненном".
Моно Открытый исходный код клон .NET и должен смочь запустить большинство приложений .NET. См. раздел "Bundles" здесь: http://www.mono-project.com/Guide:Running_Mono_Applications
Можно включать время выполнения с CD, но необходимо будет установить его прежде, чем запустить приложение. Вы могли бы изучить просто сование открытого файл HTML с CD.
Иначе можно посмотреть на запись маленькой собственной программы, которая может запросить для установки времени выполнения, если это не там или запускает приложение.NET, если это.
Вы могли использовать .hta файл на CD, чтобы запуститься как страница-заставка и оттуда обнаружить, если.NET установлена (использующий COM из файла HTA) и затем выполняет Ваш пользовательский исполняемый файл.
Файлы .hta - то, что Microsoft SQL Server (и большинство их других) CD установки использует из памяти, легкий заставить их выглядеть очень профессиональными (его справедливый HTML в фоновом режиме в основном)
Была программа из Macrovision под названием "Demoshield", который работал хорошо назад в день. Я не уверен, было ли его доступное еще, но это в порядке программа для создания программ автозапуска.
Попробуйте Delphi; это - безусловно лучший способ создать собственное win32 приложение в наше время.
Это создает гладкие автономные .exe файлы с богатым GUI, которым не нужны никакие библиотеки времени выполнения или другие раздражающие зависимости. Работы над любой машиной окон.