Я работаю над веб-приложением ASP.NET MVC 4. Я использую .NET 4.5 и пытаюсь использовать новые асинхронные API.Возврат перед async Завершение задачи
У меня есть пара ситуаций, когда я хочу запланировать задачу async для запуска позже, когда я сразу же верну сразу сразу важное значение. Например, вот метод «Логин», который я хочу, чтобы вернуть новый SessionID как можно быстрее, но как только я вернулся SessionID Я хочу, чтобы очистить старый истекли SessionID'S:
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 никогда не вызывается. Как достичь планирования фоновых задач?
Исходя из этого, 'CleanSessions' должен начинаться * при завершении' SaveChangesAsync'. Возможно, это может быть связано с задачами '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' за то, что я вижу там –
Примечание: вы не должны * использовать 'async void' для своих методов, кроме обработчиков событий верхнего уровня. –
@MarcGravell: ASP.NET будет ждать завершения всех методов async void перед отправкой ответа. Op хочет пожара и забыть. –