Почему Task.Run() блокирует действие контроллера при обработке длительных задач, связанных с процессором?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему Task.Run() блокирует действие контроллера при обработке длительных задач, связанных с процессором?

Сообщение Anonymous »

Я работаю над веб-API .NET 6 и обрабатываю задачу, связанную с процессором, с помощью Task.Run(), чтобы выгрузить ее в фоновый поток. Однако похоже, что мое действие контроллера все еще блокируется, и запрос не возвращается немедленно, как ожидалось.
Пример кода:

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

[HttpGet("process-data")]
public IActionResult ProcessData()
{
Task.Run(() => LongRunningTask());

return Ok("Processing started...");
}

private void LongRunningTask()
{
// Simulating a long CPU-bound task
Thread.Sleep(5000);
// Further processing...
}

Мои вопросы:
  • Почему Task.Run() не позволяет немедленному возврату действия контроллера?< /li>
    Как правильно запустить задачу, связанную с ЦП, в фоновом режиме и вернуть немедленный ответ в веб-API ASP.NET Core?
  • Есть ли Есть ли лучший подход к асинхронной обработке задач, связанных с ЦП, в ASP.NET Core?
Я использовал Task.Run(), чтобы разгрузить работу, связанную с ЦП. в фоновый поток, но действие контроллера по-прежнему блокируется до завершения задачи. Я ожидаю, что ответ «Обработка началась...» будет возвращен немедленно, пока длительная задача выполняется в фоновом режиме. Вместо этого запрос блокируется до тех пор, пока не завершится LongRunningTask().

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

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

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

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

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

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

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