Лучший способ распараллелить задачи .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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Избегайте двойной проверки условия при назначении из задачи, ожидаемой с помощью Task.WhenAll().
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Почему вызов неоднозначен между Task.Run(Func) и Task.Run(Func) при передаче имени метода
    Anonymous » » в форуме C#
    0 Ответы
    104 Просмотры
    Последнее сообщение Anonymous
  • Используйте Task.WhenAll в уже работающем методе.
    Anonymous » » в форуме C#
    0 Ответы
    116 Просмотры
    Последнее сообщение Anonymous
  • Task.WhenAll против Parallel.ForEachAsync – какой подход лучше и почему?
    Anonymous » » в форуме C#
    0 Ответы
    53 Просмотры
    Последнее сообщение Anonymous
  • AggregateException из Task.WhenAll содержит только первое исключение при ожидании
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous

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