Мы попробовали:
- немедленно вернуть запрос с идентификатором отслеживания, а затем запустить задачу SendAsync в HostingEnvironment.QueueBackgroundWorkItem, однако после завершения работы он выдает исключение, поскольку пытается что-то сделать с исходным веб-запросом, который уже удален.
- Немедленно возвращает запрос с идентификатором отслеживания, а затем передает SendAsync в HostingEnvironment.QueueBackgroundWorkItem в качестве функции, однако это также вызывает ошибку при активации.
- Немедленно возвращает запрос с идентификатором отслеживания, а затем ставит задание в Hangfire, которое будет сделайте прямой вызов в службу приложений и можете ждать столько, сколько потребуется. Однако даже при использовании внутреннего DNS у службы приложений Azure тайм-аут составляет 230 секунд, и мы никак не можем это изменить.
- Мы также пытались запустить сам бизнес-код в другом потоке, но мы используем autofac DI, и если мы попытаемся получить новую область, она все равно закроется при возврате исходного запроса.
- Выполнение самой работы в Hangfire означало бы повторное развертывание всего API, только для этих редких вызовов, а также мы не можем этого сделать, потому что наш Hangfire работает на AKS в Linux, а API — .NET Framework.
- Использование веб-задания — аналогичная проблема, поскольку API очень сложен, и его развертывание в веб-задании кажется очень опасным, кроме того, нам придется платить за круглосуточное веб-задание.
/> - При использовании очереди проблема в том, что я не знаю, как мы можем взять сообщение из очереди, а затем выполнить его с помощью контроллеров odata, что нам нужно будет сделать для заполнения различных контекстов и последующего получения данных из БД, которые нам нужны для этого запроса.
- Использование IHostedService — наш API — .NET Framework, а не .NET Core.