Лучший способ распараллелить задачи .NET с помощью Task.WhenAll ⇐ C#
Лучший способ распараллелить задачи .NET с помощью Task.WhenAll
У меня есть программа, которой необходимо выполнить следующие инструкции:
[*]Получить список элементов с помощью 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. Я понятия не имею, что здесь использовать. Конечно, это зависит от решения, которое используется для распараллеливания задач, поэтому любой вклад будет оценен.
У меня есть программа, которой необходимо выполнить следующие инструкции:
[*]Получить список элементов с помощью 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. Я понятия не имею, что здесь использовать. Конечно, это зависит от решения, которое используется для распараллеливания задач, поэтому любой вклад будет оценен.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему вызов неоднозначен между Task.Run
(Func ) и Task.Run(Func ) при передаче имени метода
Anonymous » » в форуме C# - 0 Ответы
- 104 Просмотры
-
Последнее сообщение Anonymous
-
-
-
AggregateException из Task.WhenAll содержит только первое исключение при ожидании
Anonymous » » в форуме C# - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-