Лучший способ распараллелить задачи .NET с помощью Task.WhenAllC#

Место общения программистов C#
Ответить
Anonymous
 Лучший способ распараллелить задачи .NET с помощью Task.WhenAll

Сообщение Anonymous »


У меня есть программа, которой необходимо выполнить следующие инструкции:
[*]Получить список элементов с помощью HTTP-запроса. [*]Для каждого полученного элемента выполнить еще один HTTP-запрос с этим элементом в качестве параметра.
На данный момент мое решение следующее:

var items = await _repository.GetItems(someInt, someGuid); вар itemsUpdated = новый ConcurrentDictionary(); foreach (элемент var в элементах) { _ = itemsUpdated.TryAdd(item, (ожидайте _updateRepository.AsyncGetChangedEntities(someInt, someGuid, item))!); } В моем приложении я использую Task.WhenAll() во многих местах для распараллеливания задач и повышения производительности. Я просто не понимаю, как я могу использовать это здесь. Кто-нибудь может помочь?

Я пробовал следующее, но застрял:

var items = await _repository.GetItems(someInt, someGuid); вар itemsUpdated = новый ConcurrentDictionary(); вар задачи = новый список(); foreach (элемент var в элементах) { Tasks.Add(_updateRepository.AsyncGetChangedEntities(someInt, someGuid, item)); //_ = itemsUpdated.TryAdd(item, // (ожидаем _updateRepository.AsyncGetChangedEntities(someInt, someGuid, item))!); } ждут Task.WhenAll(задачи); // как получить обновленные элементы из задач и вставить // по элементу в itemsUpdated ConcurrentDictionary Кроме того, поскольку мы говорим об улучшении производительности; при инициализации ConcurrentDictionary я хочу передать ожидаемую длину, чтобы избежать повторной инициализации резервного массива. Однако конструкторы также запрашивают количество потоков, которые, как ожидается, будут выполняться в ConcurrentDictionary. Я понятия не имею, что здесь использовать. Конечно, это зависит от решения, которое используется для распараллеливания задач, поэтому любой вклад будет оценен.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»