Parallel.ForEachAsync в серверном приложении BlazorC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Parallel.ForEachAsync в серверном приложении Blazor

Сообщение Anonymous »

Я хочу начать с извинений заранее, так как знаю, что было много вопросов относительно Parallel и Async. Однако, несмотря на мои усилия найти ответы, я все еще пытаюсь полностью понять, как это должно работать.
У меня есть работа, связанная с процессором (которая требует очень быстрых вызовов ожидания к внешним библиотеки), которые я хочу запускать параллельно.
Я придумал этот код:

Код: Выделить всё

var completedTasks = 0;

ParallelOptions parallelOptions = new()
{
MaxDegreeOfParallelism = Environment.ProcessorCount,
CancellationToken = CancellationToken.None
};

var functionsToRun = allObjects.Select(x => helperService.GetFunctionToRun(x));

await Parallel.ForEachAsync(functionsToRun, parallelOptions, async (individualFunction, token) =>
{

if(individualFunction is null) return;

await individualFunction().ConfigureAwait(false);

Interlocked.Increment(ref completedTasks);

// send progress object to UI thread. I tried commenting this out but it makes no performance difference
if (progressCallback is not null)
{
progressCallback(new ProgressReport() { ProgressPercentage = completedTasks * 100 / allObjects.Count, StatusMessage = $"Finished {completedTasks} of {allObjects.Count}." });
}
}).ConfigureAwait(false);
Я не вижу никакого улучшения производительности по сравнению с последовательным запуском. Каждая задача занимает примерно 300 мс. Общее количество задач составляет от 10 до 100. Я также пробовал использовать Task.Run() с Task.WhenAll, но производительность была такой же.
Почему я не вижу здесь никакого прироста производительности? В настоящее время я запускаю этот код локально (я пробовал режим отладки и выпуска).
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... server-app
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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