если выполняется определенное условие по аккаунту то валидировать не нужно, если валидация не прошла, заменить картинку.
Есть groupedImagesList - список сгрупированных елементов, где ключ аккаунтИд, а значение картинки. Допустим есть 1000 аккаунтИд и у каждого 50 картинок.
Есть 2 цикла, один проходит по groupedImagesList, второй по картинкам объекта из groupedImagesList.
Хочу оптимизировать циклы.
Есть ли смысл заменить оба на Parallel.ForEach? Если да, норм ли вызывать асинхронный метод внутри такого цикла?
Кпц красиво сделал скриншот
carbon.now.sh если интересно
Скажу сразу, что класс Parallel и асинхронное выполнение несовместимы, этот класс рассчитан на синхронные CPU-bound задачи
я, увы, на нет коре 3.1. но разве для этого кейса в .нет6 не подойдет Parallel.ForEachAsync? и я видел подобные примеры на неткор 3.1 Parallel.ForEach(groupedImages, async image => { var validationResult = await Validate(image) }); разве так нельзя?
Скоріше за все ви плутаєте поняття паралельність так асинхронність
Я хочу распараллелить циклы, и в одном из них вызвать асинхронный метод
можна ще простіше var tasks = Enumerable .Range(0, parallelism) .Select(_ => runTask()); await Task.WhenAll(tasks);
В таком случае, задача будет выполнятся на кол-ве потоков указанных в parallelism?
Ой, я и забыл про этот метод Он работает не так как все остальные из класса Parallel Ну можешь юзать его, пофиг
У меня кор3.1, не могу его юзать, что скажешь по поводу второго варианта Parallel.ForEach(groupedImages, async image => { var validationResult = await Validate(image) }); ?
Проверьте, может сработает. Я не силён в парраллелизме
Я уже сказал. Синхронные методы этого класса НЕ предназначены для асинхронности Async в данном случае будет работать как async void
Обсуждают сегодня