我正在開發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永遠不會被調用。我如何實現後臺任務調度?
基於此,當'SaveChangesAsync'完成時'CleanSessions'應該*啓動*。它也許可以用一個'Task'和'await'來處理錯誤等 - 但是它應該按照我現在看到的那樣「按現狀」工作 – 2013-02-27 23:37:45
注意:你應該從未使用異步無效的方法,頂級事件處理程序除外。 – 2013-02-27 23:39:18
@MarcGravell:在發送響應之前,ASP.NET將等待所有'async void'方法的完成。操作者想要一個忘卻火的人。 – 2013-02-27 23:40:36