Цитата:
Сообщение от Sociofilm
... Как обойтись без цикла я даже не знаю. Можно конечно на события переписать, но тогда будет значительный проигрыш в быстродействии.
|
по пунктам:
1) Надо перебрать все позиции
2) дожидаться события во время перебора
Как делал я:
- Создал объект который отвечал за один перебор, назовем его List.
- В List при старте определял массив со списком подлежащим к перебору.
- Собственно создаем цикл из трех методов:
- Получить элемент массива. Если элемент необходимо ждать регистрируем слушатель события для следующего шага, если не надо следующий шаг пропускаем.
- В данный шаг мы попадаем при наступлении события по окончании ожидания
- Здесь производится проверка есть ли еще элементы в массиве List и если они имеются переходим на первый шаг списка, если нет выходим из цикла.
- Завершение всех процедур по работе с List
Вот и все. Теперь цикл выполняется, но при необходимости мы ожидаем наступления события. И ничего не мешает рекурсивно создавать внутри одного List другой.
Добавлено через 5 минут
Да еще как вариант. Вы можете предварительно загрузить весь список в некий кэш, а потом оттуда просто создавать копии экземпляров не дожидаясь загрузки, тогда ваш цикл будет работать в исходном виде, вот только загружать в кэш будете асинхронно перед этим, по сути получите то же самое.