.NET 8: немедленно вернуть ответ 200 для длительного процессаC#

Место общения программистов C#
Ответить
Anonymous
 .NET 8: немедленно вернуть ответ 200 для длительного процесса

Сообщение Anonymous »

Я работаю над конечной точкой веб-API ASP.NET Core 8, которая будет вызываться из клиентского приложения WPF. Этой конечной точке необходимо обрабатывать большой объем данных, отправленных от клиента WPF. Клиенту не нужно ждать завершения обработки; ему нужно только знать, что запрос успешно достиг API.
Учитывая, что у нас около 2000 пользователей, использующих приложение WPF, моя цель — обеспечить, чтобы конечная точка API быстро возвращала 200 OK. ответ клиенту при запуске длительной задачи по обработке данных. Таким образом, клиент не испытывает задержки, пока сервер выполняет фоновую обработку.
Вот что я сделал на данный момент:

[*]Я реализовал конечную точку в контроллере веб-API.
[*]Я настроил ведение журнала и обработку исключений для длительной задачи.
[*]Я рассматриваю возможность использования HostedService для фоновой обработки.
Однако у меня возникла проблема с HostedService. Он принимает только CancellationToken в качестве параметра для метода ExecuteAsync, но мне нужно передать данные, которые конечная точка получает, в фоновую службу для обработки.

Можете ли вы предложить лучший способ реализации этого шаблона?
В частности: как я могу создать фоновую службу, которая может получать данные из конечной точки API?
p>
Каковы ограничения этого подхода и существуют ли лучшие альтернативы для такого рода требований?
[HttpPost]
public async Task SubmitOrder([FromBody] List orders)
{
await _transactionProcessor.CreateOrders(orders); // this is the long running task

return Ok();
}

Процессор
public class TransactionProcessor : ITractionProcessor
{
public async Task CreateOrders(List orders)
{
await Task.Delay(5000);
// process orders that takes large amount of time.
throw new NotImplementedException();
}
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... ng-process
Ответить

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

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

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

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

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