我正在开发一个 ASP.NET MVC 4 Web 应用程序。我正在使用 .NET 4.5 并试图利用新的异步 API。
我有几种情况,我想安排一个异步任务稍后运行,同时我立即返回一个立即重要的值。例如,这是一个“登录”方法,我想尽快返回一个新的 SessionID,但是一旦我返回了 SessionID,我想清除旧的过期 SessionID:
public async Task<Guid> LogIn(string UserName, string Password)
{
//Asynchronously get ClientID from DB using UserName and Password
Session NewSession = new Session()
{
ClientID = ClientID,
TimeStamp = DateTime.Now
};
DB.Sessions.Add(NewSession);
await DB.SaveChangesAsync(); //NewSession.ID is autopopulated by DB
CleanSessions(ClientID); //Async method which I want to execute later
return NewSession.ID;
}
private async void CleanSessions(int ClientID)
{
//Asynchronously get expired sessions from DB based on ClientID and mark them for removal
await DB.SaveChangesAsync();
}
我尝试了很多不同的东西,包括 Task.Run() 和 Parallel.Invoke() 的组合,但 CleanSessions 永远不会被调用。如何实现后台任务调度?