gpt4 book ai didi

entity-framework - 在 ASP.NET Core 中响应后做一些工作

转载 作者:行者123 更新时间:2023-12-04 07:23:35 24 4
gpt4 key购买 nike

我有一个使用 EFCore 的 ASP.NET Core 网站。
我想做一些像登录数据库这样的工作,但是在将响应发送给用户之后以便更快地回答。

我可以在不同的线程中执行此操作,但由于 DbContext 的异步访问,我不确定它是否安全。有没有推荐的方法来做到这一点?

public async Task<IActionResult> Request([FromForm]RequestViewModel model, string returnUrl = null)
{
try
{
var newModel = new ResponseViewModel(model);
// Some work
return View("RequestView",newModel)
}
finally
{
// Some analysis on the request
// I would like to defer this part
await Log(model);
}
}

一个原因是我想调用一个网络服务(地理编码),它不需要回答,但很好地处理日志(我需要坐标的城市/国家)。

最佳答案

我看到这从未得到回答,但实际上有一个解决方案。
简单的解决方案:

public async Task<IActionResult> Request([FromForm]RequestViewModel model, string returnUrl = null)
{
try
{
var newModel = new ResponseViewModel(model);
// Some work
return View("RequestView",newModel)
}
finally
{
Response.OnCompleted(async () =>
{
// Do some work here
await Log(model);
});
}
}

安全解决方案,如 OnCompleted过去在发送响应之前调用,因此延迟响应:

public static void OnCompleted2(this HttpResponse resp, Func<Task> callback)
{
resp.OnCompleted(() =>
{
Task.Run(() => { try { callback.Invoke(); } catch {} });
return Task.CompletedTask;
});
}

并调用 Response.OnCompleted2(async () => { /* some async work */ })

关于entity-framework - 在 ASP.NET Core 中响应后做一些工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com