我有一个 API 端点需要尽快返回给调用者。目前返回时间不到 1 毫秒。然而,如果我将一些内容记录到数据库中,现在需要接近 10 毫秒。
您将如何完成请求,然后在请求完成后进行某种处理?我尝试使用 Response.Body.Flush(),但这并没有完成请求,而且仍然需要整整 10 毫秒。看起来它正在发送/刷新有效负载,但在操作方法完成之前请求仍然没有完成。
在中间件中进行日志记录是否有效?
EDIT:
我发现的一种解决方法是使用流利调度器像这样:
JobManager.Initialize(new Registry());
JobManager.Start();
在 Host.Run() 之前的 Program.cs 中,然后通过如下操作安排立即任务:
JobManager.AddJob(() =>
{
// do something...
}, (s) => s.ToRunOnceIn(1).Seconds());
您需要以某种方式启动一个不同的线程。放置在管道前面的中间件将使您有机会在请求完成之前完成工作。如果你从那里旋转一个线程,那么它可能会起作用。
你可能想使用某种生产者-消费者模式这样你就不会杀死你的服务器。否则,如果每个请求都启动一个立即工作的线程,并且您同时有许多请求,则最终可能会耗尽资源。生产者-消费者将帮助您限制这项工作。
如果您不着急,可以再等一周左右,届时我将提供 ASP.NET 的文件记录器,然后您将在那里看到类似的实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)