Alex_Wells
@Alex_Wells
PHP/Kotlin

Асинхронность в цикле C#?

Здравствуйте. Есть foreach цикл, который собирает данные и вызывает функцию с этими данными. Но эта ф-я выполняется довольно долго, хотелось-бы запустить функции сразу для всех данных из цикла. Собственно про асинхронность читал, но не очень вьехал, к тому-же не знаю как оно будет работать с циклом и вообще что может случится. Работать должно примерно так:

1) Поток while(true), с задержкой после выполнения 1 секунда
2) Берутся данные с одного АПИ.
3) Обрабатываются, получается цикл.
4) В цикле вызывается асинхронная ф-я для каждой ячейки данных.
5) Не дожидаясь обработки ф-ий подождать 1 секунду и снова послать запрос на АПИ.
6) Все с начала, при этом не допуская вызов ф-й с данными, которые еще не обработались с предыдущего запроса

Весь код уже есть, осталась только асинхронность. Кто знает как сделать это правильно? Ф-я ничего не возвращает.
  • Вопрос задан
  • 1542 просмотра
Пригласить эксперта
Ответы на вопрос 2
yarosroman
@yarosroman Куратор тега C#
C# the best
Neuroware
@Neuroware
Программист в свободное от работы время
самый простой способ использовать parallel for each, но есть минусы, к примеру во время обработки изменять коллекцию нежелательно.
способ получше это построение очереди, то есть выдергивать объекты из списка и кидать в другой список, и уже на другой список вешать обработчики, по 1 на каждый элемент списка. По мере исполнения каждого обработчика переписывать элемент на 1 из общей кучи.
Первый способ простой, нужно заменить пару строк, второй способ лучше, но сложней. По нему делают все нормальные серверы обработки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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