У меня есть работа, связанная с процессором (которая требует очень быстрых вызовов ожидания к внешним библиотеки), которые я хочу запускать параллельно.
Я придумал этот код:
Код: Выделить всё
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);
Почему я не вижу здесь никакого прироста производительности? В настоящее время я запускаю этот код локально (я пробовал режим отладки и выпуска).
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/791 ... server-app