Пример #1
0
 public void Update(T t, U u)
 {
     lock (stateLock)
     {
         if (updates.Keys.Contains(t))
         {
             updates[t].Parameters = updaction != null?updaction(updates[t].Parameters, u) : u;
         }
         else
         {
             DateJoinU dju = new DateJoinU();
             dju.Parameters = u;
             updates.Add(t, dju);
         }
         updates[t].TimeStamp = DateTime.Now.AddSeconds(timeout);
     }
 }
Пример #2
0
        private void UpdateStateWorker(object o)
        {
            DateTime         dt          = DateTime.Now;
            List <DateJoinU> par_updates = new List <DateJoinU>();

            lock (stateLock)
            {
                par_updates = updates.Values.Where(a => a.TimeStamp < dt).ToList();
            }
            logger.Trace("TimeUpdater " + name + " State Worker Count: {0} ", par_updates.Count);
            if (par_updates.Count > 0)
            {
                Dictionary <T, DateJoinU> procdic = new Dictionary <T, DateJoinU>();
                lock (stateLock)
                {
                    foreach (T ser in updates.Keys.ToList())
                    {
                        if (par_updates.Contains(updates[ser]))
                        {
                            procdic.Add(ser, updates[ser]);
                            updates.Remove(ser);
                        }
                    }
                }
                timer.Change(Timeout.Infinite, Timeout.Infinite);
                Task.Run(() =>
                {
                    foreach (T ser in procdic.Keys)
                    {
                        DateJoinU p = procdic[ser];
                        action(ser, p.Parameters);
                    }
                    timer.Change(timeout * 1000, timeout * 1000);
                });
            }
        }