public static UserSession GetSessionItem(string id) { var item = GetSessionsCache().GetOrAdd(id, k => { using (var db = new Session.SessionContext()) { var itemTmp = db.Sessions.Where(x => x.SessionId == id).FirstOrDefault(); if (itemTmp != null) { if (itemTmp.Expires > DateTime.UtcNow) { return(itemTmp); } else { // Сессия найдена, но она истекла _deleteQueue.TryAdd(id, id); SaveChanges(); } } } return(null); }); if (item == null) { GetSessionsCache().TryRemove(id, out item); return(null); } else { if (item.Expires < DateTime.UtcNow) { // Сессия найдена, но она истекла _deleteQueue.TryAdd(id, id); SaveChanges(); return(null); } return(item); } }
private static void TaskReadFromDB() { try { if (!_sessionsSaveContext.IsValueCreated) { return; } lock (_sessionsSyncRoot) { using (var db = new Session.SessionContext()) { var dateTimeNow = DateTime.UtcNow; foreach (var res in db.Sessions.AsNoTracking().Where(x => x.Expires > dateTimeNow)) { _sessionsCache.TryAdd(res.SessionId, res); } } } } catch (Exception ex) { Debug.WriteLine("TaskReadFromDB.Error: {0}", ex.Message); } }