Ron*_*Ron 2 .net c# asp.net-mvc asynchronous async-await
我有MVC应用程序,我想保留活动日志中有关我网站中的活动,例如,如果用户登录成功,则向我的数据库插入描述此活动的行(名称为X登录的用户)在时间Y与IP的Z.
问题是我需要等待结果,我不关心结果,我不希望结果阻止我,我想将它发送给函数(DB函数中的更新Activity表) )并继续.
我会自下而上开始:
这是我的数据查询功能:
public static void InsertLogRecord(LogRecord lg)
{
try
{
string query = "INSERT INTO ActivityLog VALUES('" + lg.Id + "','" + lg.Time + "','" + lg.Executor + "','" + lg.ExecutedOn + "','" + lg.Action + "','" + lg.StartState + "','" + lg.EndState + "','" + lg.IP + "')";
AdoHelper.ExecuteNonQuery(query);
}
catch(Exception ex)
{
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的Controller函数(调用前面的"InsertLogRecord"函数)
public void UpdateLog(string exeOn, string action, string sState, string eState)
{
LogRecord lg = new LogRecord(Guid.NewGuid().ToString(), DateTime.Now, User.Identity.Name, exeOn, action, sState, eState, Request.ServerVariables["REMOTE_ADDR"]);
DataQueries.InsertLogRecord(lg);
}
Run Code Online (Sandbox Code Playgroud)
使用示例:(在日志中存储操作记录,"用户登录")
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
// Just before redirecting the user to the site I want to store the info' on my DB
UpdateLog("", "Log in", "", "");
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能正确地做到这一点?
你需要的是一个可靠的方法来排列"Fire and Forget"中的物品.你可以做的是使用HostingEnvironment.QueueBackgroundWorkItem在.NET 4.5.2哪个队列工作,并通知ASP.NET环境,这样,当它试图回收您的应用程序,它会知道待审批工作仍然在起作用介绍.
如果您使用的是以前版本的.NET框架,则可以使用Stephan Clearys BackgroundTaskManager.
我还建议在ASP.NET上阅读fire and Forget上的stephans帖子
编辑:
为了使用队列工作HostingEnvironment,只需传递一个委托.它可以是a Action<CancellationToken>或a Func<CancellationToken, Task>.
以下是使用Lambda Expression的示例:
HostingEnvironment.QueueBackgroundWorkItem(cancellationToken =>
{
// Put code here.
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6364 次 |
| 最近记录: |