Продолжить работать со Scoped после завершения http запроса (после возврата OK200)

Всем привет, мой очередной смешной вопрос:

Мне нужно вернуть 200, тк vk очень ждет ответ, либо снова отправляет мне запрос, тк таймаут выходит.

А потом я должен выполнять свою логику. В ней почти все сервисы Scoped, которые будут разрушены после завершения запроса.

[HttpPost]
        public IActionResult Callback([FromBody] dynamic data)
        {
            switch (data["type"].ToString())
            {
                case "message_new":
                    {
                        var dataJson = data["object"]["message"].ToString();
                        MessageModel messageData = data["object"].ToObject<MessageModel>();

                        Task.Run(async () =>
                        {
                            await _VKSenderService.Process(messageData);
                        });

                        break;
                    }

                case "message_event":
                    {
                        break;
                    }
            }

            return Ok("ok");
        }

Возьмем к примеру MyDbContext: Поскольку мое приложение это бот в вк, то контекст должен быть для всех свой.(Иначе я так понимаю будут проблемы при нескольких запросах одновременно) Но он разрушен раньше, чем я им воспользуюсь.

 public async Task Process(MessageModel message)
    {
        int _id = message.Message.FromId.HasValue ? (int)message.Message.FromId : 0;
        string prompt = message.Message.Text ?? "";

        var entity = await _dbContext.Entity.FindAsync(_id); // -- будет исключение если DbContext Scoped. И все будет ок, если Singlton.

        if (entity != null)
        {
            string _messageError = $"? Подождите ответа, или отмените текущий запрос";
            SendMessage(_id, _messageError);
        }
        else
        {

        }

        return;
    }

Более того, этот метод тоже вызывается внутри Scoped сервиса.

Мне нужно в другом потоке еще раз создать объекты или чего?

Task.Run(async () =>
{
    using (var scope = _serviceProvider.CreateScope())
    {
        var myScopedService = scope.ServiceProvider.GetRequiredService<MyScopedService>();
        await myScopedService.DoSomethingAsync();
    }
});

Как-то так? Или вообще все не так?) Спасибо как обычно всем кто откликнулся

Ответы (0 шт):