Я выполняю некоторые тесты с новыми фоновыми задачами с размещенными службами в функции ASP.NET Core, представленной в версии 2.1, в частности, с фоновыми задачами в очереди, и мне на ум пришел вопрос о параллелизме.
В настоящее время я строго следую учебному пособию, предоставленному Microsoft, и при попытке смоделировать рабочую нагрузку с несколькими запросами, сделанными одним и тем же пользователем для постановки задач в очередь, я заметил, что все рабочие элементы выполняются по порядку, поэтому нет параллелизма.
Мой вопрос в том, ожидается ли такое поведение? И если да, то можно ли запустить и забыть, чтобы сделать выполнение запроса параллельным, вместо того, чтобы ждать завершения рабочего элемента?
Я безуспешно искал пару дней об этом конкретном сценарии, поэтому, если у кого-то есть какое-либо руководство или примеры, я был бы очень рад.
Изменить. Код из руководства довольно длинный, поэтому ссылка на него: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host./hosted-services?view=aspnetcore-2.1#queued-background-tasks
Метод, который выполняет рабочий элемент, таков:
public class QueuedHostedService : IHostedService
{
...
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Queued Hosted Service is starting.");
_backgroundTask = Task.Run(BackgroundProceessing);
return Task.CompletedTask;
}
private async Task BackgroundProceessing()
{
while (!_shutdown.IsCancellationRequested)
{
var workItem =
await TaskQueue.DequeueAsync(_shutdown.Token);
try
{
await workItem(_shutdown.Token);
}
catch (Exception ex)
{
_logger.LogError(ex,
$"Error occurred executing {nameof(workItem)}.");
}
}
}
...
}
Суть вопроса заключается в том, чтобы узнать, может ли кто-нибудь поделиться знаниями о том, как использовать эту конкретную технологию для одновременного выполнения нескольких рабочих элементов, поскольку сервер может справиться с этой рабочей нагрузкой.
Я попробовал метод «выстрелил и забыл» при выполнении рабочего элемента, и он работал так, как я предполагал, несколько задач выполнялись параллельно одновременно, я просто не уверен, что это нормальная практика, или если есть лучший или правильный способ справиться с этой ситуацией.
BackgroundProceessing
всегда ожидает следующей задачи. Это означает, что задачи выполняются параллельно (с веб-сервером), но по порядку. - person a-ctor   schedule 15.07.2018